力扣543题:二叉树的直径
题目描述
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。
输入输出样例
1
/ \
2 3
/ \
4 5
返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。
解法,使用递归实现
class Solution {
public:
//借用高度计算的公式
//递归的实现查找二叉树的最大路径
//定义maxDepth为当前根结点所能获得的左右两边最长路径
int maxDepth=0;
int diameterOfBinaryTree(TreeNode* root) {
if(!root)
{
return 0;
}
dfs(root);
//返回的是边数
return maxDepth;
}
int dfs(TreeNode *root)
{
//定义递归终止条件
if(!root)
{
return 0;
}
//左子树的深度
int leftDepth=dfs(root->left);
int rightDepth=dfs(root->right);
maxDepth=max(maxDepth,leftDepth+rightDepth);
//返回当前结点的长度
return max(leftDepth,rightDepth)+1;
}
};