Рекурсивный поиск узла в недвоичном дереве - PullRequest
9 голосов
/ 23 декабря 2011

Я хочу найти элемент в недвоичном дереве (любой узел может иметь n - дочерних элементов) и немедленно выйти из рекурсии.Рассматриваемый узел может быть любым узлом, а не только листом.

Это мой код, но я не получаю полный поиск.

private nNode recursiveSearch(data gi,nNode node){
        if (node.getdata()==gi)
            return node;
        nNode[] children = node.getChildren(); 
        if (children.length>0)
        for (int i = 0; i < children.length; i++) {         
            return recursiveSearch(gi, children[i]);
        }
        return null;
 }

nNode содержит:

ArrayList mChildren ; (это дети)
и объект данных.

Ответы [ 2 ]

27 голосов
/ 23 декабря 2011

Вы не должны выходить после изучения первого ребенка.Вам не нужен оператор if перед циклом for.

private nNode recursiveSearch(data gi,nNode node){
    if (node.getdata()==gi)
        return node;
    nNode[] children = node.getChildren(); 
    nNode res = null;
    for (int i = 0; res == null && i < children.length; i++) {         
        res = recursiveSearch(gi, children[i]);
    }
    return res;
 }
6 голосов
/ 23 декабря 2011

В вашем коде, если recursiveSearch (gi, children [i]) возвратил ноль, тогда i + 1 не найден, измените:

private nNode recursiveSearch(data gi,nNode node){
        if (node.getdata()==gi)
            return node;
        nNode[] children = node.getChildren(); 
        nNode temp;
        if (children.length>0)
        for (int i = 0; i < children.length; i++) {         
            temp = recursiveSearch(gi, children[i]);
            if(temp!=null)
                return temp;
        }
        return null;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...