2010-02-16 141 views
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); 
     } 


    } 

这完全不是那么回事......任何输入?

回答

5

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

您应该重写,去年有条件这样的事情:

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

您还需要添加的情况下为节点是否未找到 - 在函数的最底部例如,return null

1

您似乎缺少一个基本案例。当你遇到一个没有子节点的节点时,会发生什么情况,而且这不是你正在寻找的节点?

0

如果这是Javascript,您的代码this.Search中的this可能是什么给你的问题。 this表示“当前的Function对象”。尝试用Search代替this.Search