给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。
解题思路:单独看一个节点,经过该节点的最大直径是左子树最深+右子树最深,最后-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;
}
};