Redian新闻
>
求二叉树最大路径和的变体题
avatar
求二叉树最大路径和的变体题# JobHunting - 待字闺中
c*t
1
响应号召,发中文题
二叉树求两结点间最大路径问题已经有很好解法。
现在有一个变体题,两点间最大路径必须要加上共同祖先到root这段。
比如:
3
/
4
/ \
1 2
结果为10
请问有什么好的解法?
我有一个笨解法,指数时间复杂度,为了不影响大家做题,会在跟帖贴出。
avatar
p*2
2

感觉把从root到current node的sum传进来就可以了吧?

【在 c********t 的大作中提到】
: 响应号召,发中文题
: 二叉树求两结点间最大路径问题已经有很好解法。
: 现在有一个变体题,两点间最大路径必须要加上共同祖先到root这段。
: 比如:
: 3
: /
: 4
: / \
: 1 2
: 结果为10

avatar
c*t
3
似乎可以,如何传?用一个hashmap传?

【在 p*****2 的大作中提到】
:
: 感觉把从root到current node的sum传进来就可以了吧?

avatar
c*t
4
我的笨办法,好像也没考虑负数。dfs求的是从结点到叶子的最大路径。
int dfs(BinNode root) {
if (root == null)
return 0;
if (root.left == null)
return root.value + dfs(root.right);
if (root.right == null)
return root.value + dfs(root.left);
return root.value + Math.max(dfs(root.left), dfs(root.right));
}
int maxpath(BinNode root) {
if (root == null)
return 0;
int p1 = dfs(root.left);
int p2 = dfs(root.right);
return Math.max(p1 + p2,
Math.max(maxpath(root.left), maxpath(root.right)))
+ root.value;
}

【在 c********t 的大作中提到】
: 响应号召,发中文题
: 二叉树求两结点间最大路径问题已经有很好解法。
: 现在有一个变体题,两点间最大路径必须要加上共同祖先到root这段。
: 比如:
: 3
: /
: 4
: / \
: 1 2
: 结果为10

avatar
p*2
5

当函数的参数传进来

【在 c********t 的大作中提到】
: 似乎可以,如何传?用一个hashmap传?
avatar
c*t
6
牛,已照你的解决,多谢

【在 p*****2 的大作中提到】
:
: 当函数的参数传进来

avatar
b*m
7
嗯,这个变体应该不难解决。

【在 c********t 的大作中提到】
: 牛,已照你的解决,多谢
avatar
m*k
8
两结点间最大路径问题与节点值有关么?

【在 c********t 的大作中提到】
: 响应号召,发中文题
: 二叉树求两结点间最大路径问题已经有很好解法。
: 现在有一个变体题,两点间最大路径必须要加上共同祖先到root这段。
: 比如:
: 3
: /
: 4
: / \
: 1 2
: 结果为10

avatar
q*m
9
这是面试碰到的题目吗

【在 c********t 的大作中提到】
: 响应号召,发中文题
: 二叉树求两结点间最大路径问题已经有很好解法。
: 现在有一个变体题,两点间最大路径必须要加上共同祖先到root这段。
: 比如:
: 3
: /
: 4
: / \
: 1 2
: 结果为10

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。