这里是问题链接https://leetcode.com/problems/binary-tree-maximum-path-sum/,我的解决方案是我可以从树转换为数组,所以我采用预订树步行,我参考kadane的算法来查找数组中的最大值,这是我的代码,当我运行程序时,结果总是为零,但在我的意见中,它应该是正确的,我无法弄清楚为什么它不起作用,顺便说一下,问题提示是使用dfs ,我不熟悉dfs,任何人都可以通过使用dfs方法在这个问题上提供一些思考,告诉我如何学习dfs,任何论文或笔记,视频都可以,提前感谢!
int maxPathSum(TreeNode *root) {
vector<int>res;
int max;
if (root){
res.push_back(root->val);
maxPathSum(root->left);
maxPathSum(root->right);
}
else{
return 0;
}
max = maxpathsum1(res);
return max;
}
int maxpathsum1(vector<int>&res){
int cur,max;
int len = res.size();
cur = 0;
max = 0;
for (int i=0;i<len-1;i++){
cur = cur+res[i];
if (cur<0){
cur = 0;
}
if (max<cur){
max = cur;
}
}
return max;
}
答案 0 :(得分:0)
dfs是一种遍历树中所有节点的算法(更常见的是在图中),因此它确实适合您的问题。 您可以运行dfs算法,同时将左子树和右子树之间的最大路径求和+根节点本身。 你可以在Coreman的"Introduction to Algorithms"书中找到更多关于dfs的内容。
关于你的(非常相似)解决方案,你没有在&#34; maxPathSum&#34;中使用递归的返回值。功能。您应该在&#34; root-&gt; left&#34;上调用递归后返回此值。和&#34; root-&gt;对&#34;,验证它们是正数并将它们加入到某些&#34; max2&#34;变量并使用它。