αρκετά εύκολο να βρεθεί πιο κοντά κοινό πρόγονο σε ένα BST αν όλα τα στοιχεία είναι διαφορετικά. Τι γίνεται όμως αν κάποια από τις τιμές είναι ίδιες. Μέχρι τώρα είχαμε μόνο τη σύγκριση των στοιχείων των κόμβων και ότι ήταν, αλλά τώρα χρειαζόμαστε για να ελέγξει τη διεύθυνση κόμβους και όχι μόνο τις αξίες;
Ελάχιστο κοινό πρόγονο σε μια δυαδική αναζήτηση Δέντρο
ψήφοι
2
3 απαντήσεις
ψήφοι 1
1
Ναι, αντί να χρησιμοποιούν μόνο σας keyγια τη σύγκριση, χρησιμοποιήστε (key, address of node)για σύγκριση. Αυτό απλοποιεί τον κωδικό όταν ασχολείται με μη μοναδικό κλειδιά.
ψήφοι 0
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;
}
}
ψήφοι 0
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













