Поиск в дереве, которое не BINARY

голоса
0

Эй, ребята, я создал дерево, которое не является бинарным деревом. Теперь, что я хочу, чтобы найти элемент. Главное заключается в следующем: Так как у меня нет сравнения шансов в отличие от бинарного дерева, я должен найти другие способы реализации кода. Вот то, что я подумал:

public TreeNode<City> search(City parent, TreeNode<City> t){
//As you guess, City class is irrelevant to the issue, I have no problem with City class.
    if (t.getCity().equals(parent)) {
        return t;
    }
    else if (t.hasLeftChild()){
        search(parent,t.getLeftChild());
    }
    else if(t.hasNextSibling()){
        search(parent,t.getNextSibling());
    }
    else//Since I know that case will never happen, the returned value is unimportant
        return t;
    }

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

Задан 25/05/2011 в 15:03
источник пользователем
На других языках...                            


2 ответов

голоса
0

Для начала, вам нужно (то) использовать значение , возвращаемое рекурсивных вызовах search()- вероятно , returnэто:

public TreeNode<City> search(City parent, TreeNode<City> t){
    if (t.getCity().equals(parent)) {
        return t;
    }
    else if (t.hasLeftChild()){
        return search(parent,t.getLeftChild());
    }
    else if(t.hasNextSibling()){
        return search(parent,t.getNextSibling());
    }
    return null;
}
Ответил 25/05/2011 в 15:07
источник пользователем

голоса
0

Metacode для рекурсивной функции вы ищете

public TreeNode<City> search(City parent, TreeNode<City> t){
    if (t.getCity().equals(parent)) {
        return t;
    }

    if (t.hasLeftChild()) {
        if (tmp = search(parent,t.getLeftChild())) {
            return tmp;            
        }
    }

    if (t.hasnextSibling()) {
        if (tmp = search(parent,t.getnextSibling())) {
            return tmp;            
        }
    }

    return false;
}
Ответил 25/05/2011 в 15:15
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more