Ideas
这题貌似也在左神算法里见过。
基本思想就是递归,根节点从左子树获得一个想要的信息,从右子树获得一个想要的信息,然后对两个信息进行处理。
其实可以把直径分成两半看:从根节点到左子树的叶子结点的最长路径+根节点到右子树的叶子结点的最长路径-1。
然后就简单了,问题就转变成了求二叉树的深度。
Code
C++
class Solution {
int ans = 1;
int depth(TreeNode* rt) {
if (rt == NULL) {
return 0;
}
int l_depth = depth(rt->left);
int r_depth = depth(rt->right);
ans = max(ans, l_depth + r_depth + 1);
return max(l_depth, r_depth) + 1;
}
public:
int diameterOfBinaryTree(TreeNode* root) {
depth(root);
return ans - 1;
}
};