题目来源
这道题目,我想了想,计算一棵树中距离最远的两个节点。肯定是需要遍历一遍的,怎么遍历怎么计算,没想出来。或者说利用树的什么性质来算。想想树有啥性质。
然后我又可耻的看了下答案,实际上就是遍历,记录下每个节点左右子树的最深层次,然后加上该节点即为以该节点为顶的最长路径距离。代码如下:
/**
* 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 l = 0;
int diameterOfBinaryTree(TreeNode* root) {
maxDepth(root);
return l;
}
int maxDepth(TreeNode *node)
{
if (node == NULL)
return 0;
int left = 0, right = 0;
if (node->left)
left = maxDepth(node->left);
if (node->right)
right = maxDepth(node->right);
l = max(l, left+right);
return max(left, right) + 1;
}
};
确实是个简单题,但是没做过确实也不太好想,加油。