【发布时间】:2018-03-13 00:15:33
【问题描述】:
我已经解决了很多与树相关的问题,但是,我仍然对树的某个特定方面(一般递归)没有信心:
如何将值从叶传播到根?
例如,假设我们有一棵二叉树,其中我们必须找到总和最小的从根到叶的路径。对于树图像here,总和将为7(对应于两个路径0-3-2-1-1 或0-6-1)。
我写了以下代码:
struct Node
{
int cost;
vector<Node *> children;
Node *parent;
};
int getCheapestCost( Node *rootNode )
{
if(!rootNode) return 0;
return dfs(rootNode, INT_MAX, 0);
}
int dfs(Node* rootNode, int minVal, int currVal) {
if(!rootNode) return;
currVal+=rootNode->cost;
if(rootNode->children.empty()) {
minVal = min(minVal, currVal);
return minVal;
}
for(auto& neighbor: rootNode->children) {
dfs(neighbor, minVal, currVal);
}
return currVal; //this is incorrect, but what should I return?
}
我知道最后一个 return currVal 不正确 - 但是我应该返回什么?从技术上讲,我只想在到达叶节点时返回 minVal 的值(当我在中间节点时没有值)。那么,如何将 minVal 从叶节点传播到最顶层的 root 节点?
P.S.:我正在准备面试,这对我来说是一个很大的痛苦领域,因为我几乎每次都被困在这一点上。我将非常感谢任何帮助。谢谢。
编辑:对于这个特定的,我以某种方式 wrote a solution 使用传递引用。
【问题讨论】:
标签: c++ tree tree-traversal