c++ - 二叉树中的最小路径和

标签 c++ algorithm recursion binary-tree

如何找到二叉树中的最小路径和并打印路径?该路径可以是从 ROOT 节点到任何 LEAF 节点。我已经编写了 C++ 代码来查找最小值,但在打印路径时遇到问题。

int MinTreePathSum(TreeNode *head, vector<TreeNode> &path)
{
    if(!head)  // head is NULL
        return 0;
    else if(!(head->left) && head->right)  // only head->left is NULL
        return head->val+MinTreePathSum(head->right, path);
    else if(!(head->right) && head->left)  // only head->right is NULL
        return head->val+MinTreePathSum(head->left, path);
    else
        return head->val+min(MinTreePathSum(head->left, path), MinTreePathSum(head->right, path));  // none of left and right are NULL
}

参数列表中的path没有被使用,谁能帮我打印路径总和最小的路径?

最佳答案

而不是 return head->val+min(MinTreePathSum(head->left, path), MinTreePathSum(head->right, path)); 检查右路径或左路径中的哪一个是最小值。通过保存它们,您可以找到路径。

int MinTreePathSum(TreeNode *head, string &path)
{
    if(!head)  // head is NULL
        return 0;
    else if(!(head->left) && head->right)  // only head->left is NULL
    {   
        string p; 
        int val = head->val+MinTreePathSum(head->right, p);
        path = "R" + p;
        return val;
    }
    else if(!(head->right) && head->left)  // only head->right is NULL
    {
        string p;
        int val = head->val+MinTreePathSum(head->left, p);
        path = "L" + p;
        return val;
    }
    else
    {
        int vl,vr,val;
        string pl,pr;
        vl = MinTreePathSum(head->left, pl);
        vr = MinTreePathSum(head->right, pr);
        if ( vl < vr ){
             val = vl;
             path = "L" + pl;
        } else {
             val = vr;
             path = "R" + pr;
        }
        return head->val + val;
    }
}

关于c++ - 二叉树中的最小路径和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34233675/

相关文章:

c++ - 64 位整数和旧的 C++ 编译器

java - 如何使用 chartAt() 和数组技术将两个字符串合并为一个

ruby - 给定句子可包含的分割数和单词数,对字符串进行打乱

c++: 捕获 runtime_error

c++ - 在 Qt 中使用 libarchive - 构建错误

java - 如何有条件地更新计数器算法Java

python - 将 lambda 函数添​​加在一起的便捷方式?

javascript - 基于 Promise 的递归目录读取

javascript - 为什么 setTimeout 在循环内与递归函数内无法正确执行

c++ - 我可以将 C++ 项目转换为 Delphi 吗?