1. 程式人生 > 實用技巧 >LeetCode——二叉樹的直徑

LeetCode——二叉樹的直徑

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

示例 :
給定二叉樹

      1
     / \
    2   3
   / \     
  4   5    

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

A:
對每個節點計算直徑(左子樹深度+右子樹深度+2),更新全域性變數。

    int ans;
    public int diameterOfBinaryTree(TreeNode root) {
        ans = 1;
        depth(root);
        return ans - 1;
    }
    public int depth(TreeNode node) {
        if (node == null) return 0; // 訪問到空節點了,返回0
        int L = depth(node.left); // 左兒子為根的子樹的深度
        int R = depth(node.right); // 右兒子為根的子樹的深度
        ans = Math.max(ans, L+R+1); // 計算d_node即L+R+1 並更新ans
        return Math.max(L, R) + 1; // 返回該節點為根的子樹的深度
    }