【发布时间】:2021-09-10 10:45:54
【问题描述】:
我想递归地找到树(不是二进制)中所有节点的总和,我已经尝试过了,但我没有得到正确的答案。一般来说,我很难理解递归在问题中的工作原理,我无法理解它的工作原理。请帮助
int sum(TreeNode<int>* root){
int s = 0;
for(int i=0; i<root->child.size(); i++){
s += root->data;
sum(root->child[i]);
}
return s;
}
请看一下树形结构:Tree Structure Image
【问题讨论】:
-
这必须是递归的吗?使用
std::queue和for循环的级别顺序遍历在程序堆栈上的密集程度较低。 -
int sum(TreeNode<int>* root)这个函数返回总和。sum(root->child[i]);这个调用不使用返回值。,你计算它然后把它扔掉。 OTOHs += root->data;这是循环执行的。如果您的节点有 N 个子节点,则将节点自己的数据求和 N 次。如果它没有孩子,那么它的数据根本不会影响总和。 -
如何在每次通话中存储子数据而不是直接丢弃?
-
@Jessica 递归执行此操作似乎很尴尬,IMO。一个简单的level order traversal 更整洁,如果有很多节点,也不会爆出程序堆栈。