【发布时间】:2020-01-16 23:35:51
【问题描述】:
所以我有一棵像这样的树:
class Tree{
public:
int data1;
string data2;
Animal animal;
std::list<Tree> children;
};
我正在尝试计算奇数级别的data1 节点的总和,但我无法这样做。我这样计算所有节点的总和:
int addData1(const Tree* t, int sum){
if(t == nullptr) {
return sum;
}
else{
int temp = 0;
std::list<Tree> forest = t->children;
std::list<Tree>::iterator it;
for(it = forest.begin(); it != forest.end(); ++it){
Tree curr = *it;
temp += addData1(&curr, sum);
}
return t->data1 + temp;
}
}
但是对于奇数级别我无法这样做,我这样尝试过,但我得到的总和不正确:
int addData1Odd(const Tree* t, bool odd, int sum){
if(t == nullptr){
return sum;
}
else{
int temp = 0;
std::list<Tree> forest = t->children;
std::list<Tree>::iterator it;
for(it = forest.begin(); it != forest.end(); ++it){
Tree curr = *it;
if(odd)
temp += addData1Odd(&curr, !odd, sum);
}
return t->data1 + temp;
}
}
我将不胜感激。
【问题讨论】:
-
虽然递归代码可能很麻烦,但您是否尝试过在调试器中单步执行您的代码?
-
@Someprogrammerdude 我也试过了,但这很令人困惑,我假设我的思考方式有问题
标签: c++ algorithm tree tree-traversal