LeetCode543 二叉树的直径

415 阅读1分钟

给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。

最后那句话是个大坑,如果没有那句话此题很简单可以想出答案是root的左子树的最高高度加上右子树的最大高度。但是有了后面的那句话之后就必须考虑更复杂的二叉树的情况,比如有些子树他们的直径是会超过经过根节点的直径的。所以在迭代的时候就必须每次更新当前节点的最大直径。

public class diameterOfBinaryTree {
 int ans = 0;
 public int diameterOfBinaryTree(TreeNode root) {

     depth(root);//只是为了更新ans的值
     return ans;
 }

 private int depth(TreeNode root) {
     if (root == null) {
         return 0;
     }
     int left = depth(root.left);
     int right = depth(root.right);
     ans = Math.max(left+right,ans);
     return Math.max(left,right)+1;
 }
}