每日力扣-树-二叉树的直径

65 阅读1分钟

给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。

解题思路:单独看一个节点,经过该节点的最大直径是左子树最深+右子树最深,最后-1是因为边比点数少1

class Solution {
public:
    int ans = 1;
    int diameterOfBinaryTree(TreeNode* root) {
        depth(root);
        return ans - 1;
    }
    int depth(TreeNode* root)
    {
        if(root == nullptr) return 0;
        int ldepth = depth(root->left);
        int rdepth = depth(root->right);
        ans = max(ans,ldepth + rdepth + 1);
        return max(ldepth,rdepth) + 1;
    }
};