给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。
最后那句话是个大坑,如果没有那句话此题很简单可以想出答案是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;
}
}