0

任何节点都可以有任意数量的子节点。为了搜索这棵树,我写了这样的东西

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);
        }


    }

这不太管用...任何输入?

4

3 回答 3

5

您只递归搜索具有子节点的第一个节点。

您应该将最后一个条件重写为如下内容:

if (nodes[i].hasOwnProperty('children')) {
    var node = this.Search(key, nodes[i].children);
    if(node != null)
        return node;
}

如果找不到节点,您还需要添加一个案例 - 例如,return null在函数的最底部添加一个案例。

于 2010-02-16T02:53:35.043 回答
1

您似乎缺少一个基本案例。当您遇到一个没有子节点并且也不是您要查找的节点时会发生什么?

于 2010-02-16T02:53:02.830 回答
0

如果这是 Javascript,那么this在您的代码this.Search中可能是给您带来问题的原因。 this表示“当前的 Function 对象”。尝试替换this.SearchSearch.

于 2010-02-16T02:54:59.613 回答