给出一个二叉树,要求求出从树中任意一个节点到另一节点的最长路径的长度(长度是经过节点个数-1)。可能不经过跟节点
1 / \ 2 3 / \ 4 5 Return 3, which is the length of the path [4,2,1,3] or [5,2,1,3]本来想用动态规划的方法自底而上进行求解,但这样比较浪费空间。在参考discus后,可以将maxlength提取出来,每次与之前的最大值相比较。
class Solution {
public:
int maxdiadepth = 0;
int dfs(TreeNode* root) {
if (root == NULL) return 0;
int leftdepth = dfs(root->left);
int rightdepth = dfs(root->right);
if (leftdepth + rightdepth > maxdiadepth) maxdiadepth = leftdepth + rightdepth;
return max(leftdepth + 1, rightdepth + 1);
}
int diameterOfBinaryTree(TreeNode* root) {
dfs(root);
return maxdiadepth;
}
};