Recherche dans un arbre qui n'est pas BINARY

voix
0

Hé les gars, j'ai créé un arbre qui n'est pas un arbre binaire. Maintenant, ce que je veux est à la recherche d'un élément. La chose principale est la suivante: Puisque je n'ai aucune chance de comparaison contrairement à un arbre binaire, je dois trouver d'autres façons de mettre en œuvre le code. Voici ce que je pensais:

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;
    }

Bien sûr, ce code ne fonctionne pas. La partie difficile est que je dois retourner la valeur que je cherche dès que je le trouve. Pourtant, si je ne trouve pas, je dois encore retourner quelque chose. Comment vais-je faire ???

Créé 25/05/2011 à 15:03
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
0

Pour commencer, vous devez ( en quelque sorte) utiliser la valeur renvoyée par les appels récursifs à search()- probablement returnil:

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;
}
Créé 25/05/2011 à 15:07
source utilisateur

voix
0

métacode pour la fonction récursive que vous recherchez

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;
}
Créé 25/05/2011 à 15:15
source utilisateur

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