Given a binary tree, you need to compute the length of the diameter of the tree. The diameter of a binary tree is the length of the longest path between any two nodes in a tree. This path may or may not pass through the root.
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;
}
};
Base Case:
当Node为空的时候,返回高度为0
Recursive Rule :
传递: 左右子孩子
向下索取:下一层的左孩子和右孩子的最高深度
处理返回上来的参数:边长无非就是左边和右边传递上来的高度合,将其和全球变量比对并且取大保存
向上返回:选择更高的深度并且加上当前层数的高度 (+1) 。最终返回。
class Solution(object):
def diameterOfBinaryTree(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if not root:
return 0
self.maxdepth=0
self.dfsHelper(root)
return self.maxdepth
def dfsHelper(self,root):
if not root:
return 0
leftdepth=self.dfsHelper(root.left)
rightdepth=self.dfsHelper(root.right)
if leftdepth+rightdepth>self.maxdepth:
self.maxdepth=leftdepth+rightdepth
return max(leftdepth+1,rightdepth+1)