543.二叉樹的直徑
- 二叉樹的直徑
難度簡單397
給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值。這條路徑可能穿過也可能不穿過根結點。
示例 : 給定二叉樹
1 / \ 2 3 / \ 4 5
返回 3, 它的長度是路徑 [4,2,1,3] 或者 [5,2,1,3]。
1.dfs
最長直徑。可能有三種情況、1.要麼在左子樹中 2.要麼在右子樹中 3.要麼經過根節點、
前兩者直接遞歸 求出最大值即可。但是第三種情況,我們需要存儲一個變量。也就是當前遞歸的最大值。
至於最終返回的是max 而不是Math.max(leftDepth,rightDepth)+1; 是因爲max存儲的值最長直徑,而Math.max(leftDepth,rightDepth)+1;存儲的只是當前節點的左右子樹的最大值+1。
時間複雜度爲O(n)
空間複雜度爲O(1)
private int max = 0;//存儲最長直徑
public int diameterOfBinaryTree(TreeNode root) {
dfs(root);
return max;
}
public int dfs(TreeNode root){
if(root == null){
return 0;
}
int leftDepth = dfs(root.left);//遞歸左子樹長度
int rightDepth = dfs(root.right);//遞歸右子樹長度
max = Math.max(leftDepth+rightDepth,max);//二者最大值
return Math.max(leftDepth,rightDepth)+1;
}