【发布时间】:2021-07-31 10:01:12
【问题描述】:
我在一次采访中遇到了这个问题,虽然起初看起来很容易,但当我深入研究时,对于大量的边缘情况来说,这对我来说几乎是不可能的。
要求:
想象一棵树,其中每个节点可以有 0 到 10 个孩子,每个孩子都有自己的权重,编写一个执行以下操作的函数:
- 如果根没有子节点,则返回 -1;
- 否则,返回树的所有子节点(根节点除外)的权重总和。
我尝试了类似的方法:
int my_func(node *root) {
if (root->isleaf())
{
return -1;
}
int result = 0;
for (int i = 0; i < root->num_of_children(); ++i)
{
result += my_func(root->child[i]);
}
return result;
}
但这真的很糟糕,原因有两个:
-
我并不是所有孩子的体重相加。
-
当我到达叶子孩子时,我正在求和 -1 而我应该加 0。
【问题讨论】:
-
编写对所有节点、root和all的权重求和的函数;这只是一个简单的递归。然后编写另一个调用第一个函数的函数,然后从该总数中减去根的权重(或者,对每个孩子调用第一个并将结果相加)。第二个函数还将处理仅根树的特殊情况。
-
c 与此有什么关系??我可能会让你在工作面试中失败,因为不知道有什么不同。另外,您的代码中关于 c++11 的具体内容是什么?我没有看到任何相关性,将删除标签。
-
@πάνταῥεῖ 我确信有更好的方法可以告诉他 C 标签不相关。
-
根据文字描述,这个函数应该总是返回一个负值。