Функция поиска по дереву - PullRequest
       45

Функция поиска по дереву

0 голосов
/ 16 февраля 2010

Любой узел может иметь любое количество дочерних элементов. Для поиска этого дерева я написал что-то вроде этого

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 ]

5 голосов
/ 16 февраля 2010

Вы только рекурсивно ищите первый узел, у которого есть дочерние элементы.

Вы должны переписать это последнее условие примерно так:

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

Вам также необходимо добавить регистр, если узел не найден - например, return null в самом низу функции.

1 голос
/ 16 февраля 2010

Кажется, вам не хватает базового варианта. Что происходит, когда вы сталкиваетесь с узлом, у которого нет дочерних элементов и который не является искомым?

0 голосов
/ 16 февраля 2010

Если это Javascript, this в вашем коде this.Search, вероятно, то, что создает вам проблему. this означает «текущий объект функции». Попробуйте заменить this.Search просто Search.

...