思路:
后序遍历,只是直径指的是边,而不是节点的个数
代码:
class Solution {
int max=0;
public int diameterOfBinaryTree(TreeNode root) {
depth(root);
return max;
}
private int depth(TreeNode root){
if(root==null){
return 0;
}
int left=depth(root.left);
int right=depth(root.right);
//直径求的是边的长度,而不是节点的数量,但是最终结果左节点高度+右节点高度=左边+右边+根节点与左右的连接边
max=Math.max(max,left+right);
return Math.max(left,right)+1;
}
}
分解:
1)后序遍历,return时返回Math.max(left,right)+1最大的一个再+1
2)直径求的是边的长度,而不是节点的数量,但是最终结果:
左节点高度+右节点高度=左边+右边+根节点与左右的连接边
复杂度分析:
时间复杂度:O(N)
空间复杂度:O(N)