Ψάχνοντας σε ένα δέντρο που δεν είναι ΔΥΑΔΙΚΌ

ψήφοι
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

Μετακώδικα για την αναδρομική συνάρτηση που ψάχνετε

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