【发布时间】:2021-05-13 16:04:08
【问题描述】:
我有一个树对象,它有两个孩子(子树)5 和 6。5 有另一个孩子 7,6 有另一个孩子 8。我想查找树中是否包含任何特定的子树。例如,我编写了一个函数,如果树中存在子树 8,它将返回。
var tree = {
value: undefined,
children: [{
value: 5,
children: [{
value: 7,
children: []
}]
}, {
value: 6,
children: [{
value: 8,
children: []
}]
}]
};
我的递归函数:
var contains = function (node, target) {
for (var i = 0; i < node.children.length; i++) {
if (node.children[i].value === target) {
return true;
} else {
return contains(node.children[i], target);
}
return false;
}
};
contains(tree, 8);
如我们所见,树中存在 8,但我的函数返回 false。如果我想检查是否存在 5 或 7,我的函数返回 true,但如果我调用它来搜索 6 或 8,它会返回 undefined。我尝试使用调试器,它显示我的代码没有增加 for 循环来检查5 岁以后的下一个孩子。任何帮助将不胜感激。提前致谢。
【问题讨论】:
-
你的
return false应该在for循环之外 -
return false永远不会执行,但重点是正确的:您总是在循环的第一次迭代中返回,因此不会发生太多迭代。 -
@TKoL 我将 return false 移到了 for 循环之外。但对于 6 或 8 仍然不正确。
标签: javascript recursion data-structures tree