代码之家  ›  专栏  ›  技术社区  ›  sarsnake

树搜索功能

  •  0
  • sarsnake  · 技术社区  · 15 年前

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

    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 回复  |  直到 15 年前
        1
  •  5
  •   Anon.    15 年前

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

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

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

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

        2
  •  1
  •   Tyler McHenry    15 年前

    你好像错过了一个基本案例。当您遇到一个没有子节点也不是您要查找的节点时会发生什么?

        3
  •  0
  •   Jacob    15 年前

    如果这是javascript, this 在您的代码中 this.Search 可能是问题出在你身上。 表示“当前函数对象”。请尝试替换 这个搜索 用公正 Search .

    推荐文章