题目描述:
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。
链接:https://leetcode-cn.com/problems/diameter-of-binary-tree/
重要信息:该条路径可能不穿过根节点。即子树的路径可能比另一子树从根到该子树最远节点的路径要长。
思路分析:求树的深度时,也会求子树的深度,则带入一个临时值,用此来比较子树的路径长大还是父树的。
代码:
class Solution {
public:
int ret = 0;//返回值
int high(TreeNode* root)
{
if(root == nullptr)
return 0;
int left = high(root->left);
int right = high(root->right);
ret = max(left + right,ret);//判断谁大
return max(left + 1,right + 1);
}
int diameterOfBinaryTree(TreeNode* root) {
if(root == nullptr)
return 0;
high(root);//求树的深度
return ret;
}
};