二叉树

二叉树的直径

简单#543Java时间 O(n)空间 O(h)

题目要做什么

求任意两个节点之间最长路径的边数。路径可以不经过根节点。

题目示例输入root = [1,2,3,4,5]
题目示例输出3

01 为什么这样做

经过某节点的最长路径是左高度加右高度。每个节点都尝试更新全局直径,而递归只向父节点返回单侧高度。

始终成立的条件

best 记录已处理节点中的最大左右高度之和;height 返回单侧高度。

02 看见算法执行

动画与代码同步

修改输入,播放自己的例子

当前使用题目示例
修改输入会改变执行过程;预期输出用于核对结果。
数组 / nums步骤 1
执行状态
本次演示输出播放到最后查看

Solution.java参考解法
1class Solution {2    private int best;3    public int diameterOfBinaryTree(TreeNode root) {4        best = 0;5        height(root);6        return best;7    }8    private int height(TreeNode node) {9        if (node == null) return 0;10        int left = height(node.left);11        int right = height(node.right);12        best = Math.max(best, left + right);13        return Math.max(left, right) + 1;14    }15}

键盘控制:A 后退 · D 前进

编程练习

↑↓ 选择↵ 打开Pagefind 全文检索