题解:
这道题我刚开始的思路是:求出以根节点为中心,左子树的最大深度(从1开始) + 右子树的最大深度,对于样例来说就是:左子树深度(2) + 右子树深度(1) = 3,但是有个样例通不过,问题就出现在两个节点路径长度的最大值不一定根节点在中间的,有可能是任意的一个节点(也就是可能某个子节点在中间,两边的深度之和更大) ,所以递归的每个节点的时候都要求一次左右两边最大深度之和,然后记录下最大值。
代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int maxLen = 0;
int diameterOfBinaryTree(TreeNode* root) {
if(root == NULL)
{
return 0;
}
sovle(root);
return maxLen;
}
int sovle(TreeNode* node)
{
if(node == NULL)
{
return 0;
}
int leftDepth = sovle(node->left);
int rightDepth = sovle(node->right);
if(leftDepth+rightDepth > maxLen)
{
maxLen = leftDepth+rightDepth;
}
return max(leftDepth,rightDepth) + 1;
}
};