1. 程式人生 > 其它 >LeetCode543 二叉樹的直徑

LeetCode543 二叉樹的直徑

題目

給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值。這條路徑可能穿過也可能不穿過根結點。

示例 : 
給定二叉樹 
    1
   / \
  2   3
 / \     
4   5    

返回 3, 它的長度是路徑 [4,2,1,3] 或者 [5,2,1,3]。 
注意:兩結點之間的路徑長度是以它們之間邊的數目表示。

方法

遞迴法

在計算深度時計算的是節點的個數,題目所求為邊的個數,因此要res-1

  • 時間複雜度:O(n),n為二叉樹的節點數
  • 空間複雜度:O(h),h為二叉樹的深度,每次遞迴都要分配棧空間,遞迴的次數取決於二叉樹的深度
class Solution {
    int res = 0;
    public int diameterOfBinaryTree(TreeNode root) {
        findMaxDepth(root);
        return res-1;
    }
    private int findMaxDepth(TreeNode root){
        if(root==null){
            return 0;
        }
        int left = findMaxDepth(root.left);
        int right = findMaxDepth(root.right);
        res = Math.max(res,left+right+1);
        return Math.max(left,right)+1;
    }
}