LeetCode第 543 題:二叉樹的直徑(C++)

阿祭兒 發表於 2020-10-17

543. 二叉樹的直徑 - 力扣(LeetCode)

在這裡插入圖片描述
求的是直徑,這個直徑的描述還是有點不好明白的:任意兩個結點路徑長度中的最大值。

需要注意:直徑不一定會過根節點,所以每個節點都有可能是直徑的“支點”,計算的時候就需要不停的更新。

class Solution {
public:
    int res = 0;
    int diameterOfBinaryTree(TreeNode* root) {
        if(!root)   return 0;
        dfs(root);
        return res;
    }
    int dfs(TreeNode* root){
        if(!root)   return 0;//為空
        if(!root->left && !root->right) return 1;//加上這一行會快很多
        int l = dfs(root->left);
        int r = dfs(root->right);
        //左右子樹相對根節點的路徑和即為以根節點為支點的直徑
        res = max(res, l+r);
        return 1 + max(l, r);
    }
};