C++ 求最大路径和,我们可以在二叉树的任何节点中开始和结束
这是问题链接,我的解决方案是我可以从一棵树转换成一个数组,所以我采用预排序树遍历,我参考kadane的算法来找到数组中的最大值,这是我的代码,当我运行程序时,结果总是为零,但在我的选项中,它应该是正确的,我不明白为什么它不起作用,顺便说一下,问题提示是使用dfs,我不熟悉dfs,有人能提供一些使用dfs方法在这个问题上的想法,并告诉我如何学习dfs好,任何论文或笔记,视频都可以,提前谢谢C++ 求最大路径和,我们可以在二叉树的任何节点中开始和结束,c++,algorithm,C++,Algorithm,这是问题链接,我的解决方案是我可以从一棵树转换成一个数组,所以我采用预排序树遍历,我参考kadane的算法来找到数组中的最大值,这是我的代码,当我运行程序时,结果总是为零,但在我的选项中,它应该是正确的,我不明白为什么它不起作用,顺便说一下,问题提示是使用dfs,我不熟悉dfs,有人能提供一些使用dfs方法在这个问题上的想法,并告诉我如何学习dfs好,任何论文或笔记,视频都可以,提前谢谢 int maxPathSum(TreeNode *root) { vector<int>r
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;
}
int maxPathSum(TreeNode*root){
向量机;
int max;
如果(根){
res.push_back(root->val);
maxPathSum(根->左);
maxPathSum(根->右);
}
否则{
返回0;
}
max=maxpathsum1(res);
返回最大值;
}
int maxpathsum1(向量和分辨率){
int cur,max;
int len=res.size();
cur=0;
max=0;
对于(inti=0;idfs是一种遍历树中所有节点的算法(通常在图中),因此它确实适合您的问题。
您可以只运行dfs算法,同时每次将左子树和右子树之间的最大路径加上根节点本身相加。
你可以在Coreman的书中找到更多关于dfs的内容
关于您(非常类似)的解决方案,您没有在“maxPathSum”函数中使用递归的返回值。您应该在“root->left”和“root->right”上调用递归后获取返回的这些值,验证它们是否为正,并将它们相加为一些“max2”变量并使用它。dfs=depth-first search。在谷歌上点击9000万次,可能是一个很好的开始