题解
- 易错点
二叉树的直径不等于左子树最长路径+右子树最长路径 - 反例
- 正解
应该计算每个节点的直径,然后求所有直径的最大值.每个节点的直径就是左子树最大深度+右子树最大深度
int maxdiameter=0;
public int diameterOfBinaryTree(TreeNode root) {
if (root==null){
return 0;
}
int leftLength = maxPathlength(root.left);
int rightLength = maxPathlength(root.right);
maxdiameter=Math.max(maxdiameter,leftLength+rightLength);
diameterOfBinaryTree(root.left);
diameterOfBinaryTree(root.right);
return maxdiameter;
}
public int maxPathlength(TreeNode curr) {
if (curr==null){
return 0;
}
int leftmax = maxPathlength(curr.left);
int right = maxPathlength(curr.right);
return Math.max(leftmax,right)+1;
}