问题描述
我有一个树对象,它有两个孩子(子树)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
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 {
if(contains(node.children[i],target)) return true;
}
}
return false;
};
console.log(contains(tree,8));