2010-02-16 138 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