树搜索功能

时间:2010-02-16 02:49:29

标签: tree-structure tree-search

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

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


    }

哪个不太有效...任何输入?

3 个答案:

答案 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