LeetCode 543.二叉树的直径 题解
题目描述
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。
示例 :
给定二叉树
1 | 1 |
返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。
注意:两结点之间的路径长度是以它们之间边的数目表示。
算法1
(递归) $O(n)$
根据题目描述,需要求出树的最大直径。
不难分析出,树的最大直径为:
某个节点左子树和右子树最大深度的和,即找到某一个节点,分别向左子树深入和右子树深入,找到两边深入的最大值,并求其和的最大值
那么我们遍历整个树,即可找到这样一个最大的节点,即最大直径
那么递归基是什么呢?
我们可以发现,当一个节点还有孩子节点时,那么它的深度是可以继续 +1 的,而当节点是叶子节点,就是其不存在左右子树时,他的深度不会增加
因此我们可以根据节点本身是否为空、节点是否有左右孩子,来判断节点的深度是否需要更新。
1 | /** |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.