给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。
def diameterOfBinaryTree(self, root):
diameter = [0]
self.depth(root, diameter)
return diameter[0]
def depth(self, root, diameter):
if not root:
return 0
left_height = self.depth(root.left, diameter)
right_height = self.depth(root.right, diameter)
diameter[0] = max(diameter[0], left_height + right_height)
return 1 + max(left_height, right_height)
class Solution {
public:
int maxdiadepth = 0;
int dfs(TreeNode* root){
if(root == NULL) return 0;
int leftdepth = dfs(root->left);
int rightdepth = dfs(root->right);
if(leftdepth + rightdepth > maxdiadepth) maxdiadepth = leftdepth + rightdepth;
return max(leftdepth +1, rightdepth + 1);
}
int diameterOfBinaryTree(TreeNode* root) {
dfs(root);
return maxdiadepth;
}
};