题目概述
解题思路
这道题的思路就是:比较树中各个节点的左右子节点长度之和谁最大。通过递归地求解即可实现。时间复杂度可以控制在O(N)。
这道题的重点在于避免多次遍历一棵树。
解法性能
示例代码
class Solution {
public:
int depth(TreeNode *root, int &ans)
{
if(root == NULL)
return 0;
int L_depth = 0, R_depth = 0;
if(root->left)
L_depth = 1 + depth(root->left, ans);
if(root->right)
R_depth = 1 + depth(root->right, ans);
ans = max(L_depth + R_depth, ans);
return max(L_depth, R_depth);
}
int diameterOfBinaryTree(TreeNode* root)
{
int res = 0;
depth(root, res);
return res;
}
};