1,题目要求
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.
给定二叉树,您需要计算树的直径长度。 二叉树的直径是树中任意两个节点之间最长路径的长度。 此路径可能会也可能不会通过根目录。
2,题目思路
对于这道题,要求求一棵树的最大直径。
需要注意的是,找到的最长路径未必是整棵树的左子树的高度加上右子树的高度。因为有可能左子树的节点数目众多,使得左子树中存在最长路径,而右子树可能就一个节点。
3,代码实现
class Solution {
public:
int diameterOfBinaryTree(TreeNode* root) {
ht(root);
if(root == NULL)
return 0;
return sum-1;
}
int ht(TreeNode* root){
if(root==NULL)
return 0;
int lh = ht(root->left);
int rh = ht(root->right);
sum = max(sum, 1+lh+rh);
return 1+max(lh, rh);
}
private:
int sum = 0;
};