任何节点都可以包含任意数量的子节点。为了搜索这棵树我写了这样的东西
function Search(key, nodes){
for (var i = 0; i < nodes.length; i++) {
if (nodes[i].key == key) {
return nodes[i];
}
if (nodes[i].hasOwnProperty('children')) {
return this.Search(key, nodes[i].children);
}
}
哪个不太有效...任何输入?
答案 0 :(得分:5)
您只能递归搜索有子节点的第一个节点。
您应该将最后一个条件重写为以下内容:
if (nodes[i].hasOwnProperty('children')) {
var node = this.Search(key, nodes[i].children);
if(node != null)
return node;
}
如果找不到节点,您还需要添加一个案例 - 例如,函数最底部的return null
。
答案 1 :(得分:1)
你似乎错过了一个基本案例。遇到没有子节点但也不是您正在寻找的节点时会发生什么?
答案 2 :(得分:0)
如果这是Javascript,则代码this
中的this.Search
可能会给您带来问题。 this
表示“当前的Function对象”。尝试仅使用this.Search
替换Search
。