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関数の一番下に a を追加します。

于 2010-02-16T02:53:35.043 に答える
1

基本ケースが不足しているようです。子を持たず、探しているノードでもないノードに遭遇した場合はどうなりますか?

于 2010-02-16T02:53:02.830 に答える
0

これが Javascript の場合this、コード内でthis.Search問題が発生している可能性があります。 this「現在の関数オブジェクト」を意味します。this.Searchだけに置き換えてみてくださいSearch

于 2010-02-16T02:54:59.613 に答える