leetcode 每日一題 543 二叉樹的直徑 dfs方法

Mosiclone發表於2020-10-29

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

在這裡插入圖片描述
這裡最長直徑的邊一定都是葉子結點,用深度遍歷整個樹。一般思路是找出節點左邊的最大長度和右邊的最大長度加起來可能就是最大直徑,這裡就只需要返回 max(right,left)。但是因為最長直徑可能不過根節點,所以這裡多加一個判斷條件,如果當前節點的左子樹最大長度和右子樹最大長度之和大於當前最大長度就更新一下。

class Solution {
    int max = 0;
    public int diameterOfBinaryTree(TreeNode root) {
        if(root==null)return 0;
        dfs(root);
        return max-2;  //葉子結點處多加了1,兩個頂點就多加了2
    }
    public int dfs(TreeNode node){
        if(node==null)return 0;
        int left = bfs(node.left)+1;
        int right = bfs(node.right)+1;
        if(left+right>max)max=left+right;
        return Math.max(left,right);
    }
}

相關文章