Ελάχιστο κοινό πρόγονο σε μια δυαδική αναζήτηση Δέντρο

ψήφοι
2

αρκετά εύκολο να βρεθεί πιο κοντά κοινό πρόγονο σε ένα BST αν όλα τα στοιχεία είναι διαφορετικά. Τι γίνεται όμως αν κάποια από τις τιμές είναι ίδιες. Μέχρι τώρα είχαμε μόνο τη σύγκριση των στοιχείων των κόμβων και ότι ήταν, αλλά τώρα χρειαζόμαστε για να ελέγξει τη διεύθυνση κόμβους και όχι μόνο τις αξίες;

Δημοσιεύθηκε 06/08/2011 στις 11:25
πηγή χρήστη
Σε άλλες γλώσσες...                            


3 απαντήσεις

ψήφοι
1

Ναι, αντί να χρησιμοποιούν μόνο σας keyγια τη σύγκριση, χρησιμοποιήστε (key, address of node)για σύγκριση. Αυτό απλοποιεί τον κωδικό όταν ασχολείται με μη μοναδικό κλειδιά.

Απαντήθηκε 06/08/2011 στις 11:31
πηγή χρήστη

ψήφοι
0

Χωρίς να δει τι είδους struct που χρησιμοποιείτε, είναι δύσκολο να δώσει λεπτομέρειες, αλλά θα μπορούσατε να δοκιμάσετε κάτι σαν αυτό ψευδοκώδικα:

struct BST {
    struct BST* parent;
    struct BST* left;
    struct BST* right;
    void* value;
}

find_common_ancestor(struct BST* x, struct BST* y)
{
    set<struct BST*> ancestors;

    // Add all of x's ancestors to set.
    while (true) {
        ancestors.insert(x);

        if (x == NULL)
            break;

        x = x=>parent;
    }

    // Check y's ancestors against x's until a match is found.
    while (true) {
        if (ancestors.count(y) > 0)
            return y;

        y = y->parent;
    }
}
Απαντήθηκε 06/08/2011 στις 11:41
πηγή χρήστη

ψήφοι
0

Εδώ είναι psudocode. απλά να τους μετατρέψει σε σύνταξη.

GETLeastCommonAn(BINARYTREE BT, NODE A, NODE  B)
IF Root==NIL
    return NIL
ENDIF

IF Root==A OR root==B
    return Root
ENDIF

Left = GETLCA (Root.Left, A, B)
Right = GETLCA (Root.Right, A, B)

IF Left! = NIL AND Right! = NIL
    return root
ELSEIF Left! = NIL
    Return Left
ELSE
    Return Right
ENDIF
Απαντήθηκε 05/09/2014 στις 07:17
πηγή χρήστη

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