二叉樹任意兩個節點間的最大距離(Java,LeetCode 543二叉樹的直徑 遞迴)

wyplj_sir發表於2020-09-27

文章目錄

題目

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

示例

給定二叉樹:

     1
    / \
   2   3
  / \     
 4   5    

返回 3, 它的長度是路徑 [4,2,1,3] 或者 [5,2,1,3]。

注意:兩結點之間的路徑長度是以它們之間邊的數目表示。

程式碼

思路:
使用遞迴的方法,用一個全域性變數max儲存最大距離
(一開始沒寫出來是因為把自己繞進去了,重點就在於,遞迴的時候,更新maxleftMax+rightMax,而返回leftMax和rightMax的較大值

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    int max = 0;
    public int diameterOfBinaryTree(TreeNode root) {
        getMax(root);
        return max;

    }
    public int getMax(TreeNode node){
        if(node == null){
            return 0;
        }
        int leftMax = 0;
        int rightMax = 0;
        if(node.left != null){
            leftMax = getMax(node.left);
        }
        if(node.right != null){
            rightMax = getMax(node.right);
        }
        max = Math.max(leftMax + rightMax, max);
        return Math.max(leftMax, rightMax) + 1;
    }
}

相關文章