Es ist ziemlich einfach, die am nächsten gemeinsamen Vorfahren in einem BST zu finden, wenn alle Elemente verschieden sind. Aber was, wenn einige Werte sind gleich. Bis jetzt wurden verglichen wir nur die Daten von Knoten und das war es, aber jetzt brauchen wir für Knoten Adresse zu überprüfen, statt nur Werte?
Die niedrigste gemeinsame Vorfahren in einem binären Suchbaum
stimmen
2
Veröffentlicht am 06/08/2011 um 11:25 2011-08-06 11:25
quelle vom benutzer arvind.mohan
In anderen Sprachen...
quelle vom benutzer arvind.mohan
In anderen Sprachen...
3 antworten
stimmen 1
1
Ja, statt mit nur Ihre keyfür den Vergleich, verwenden Sie (key, address of node)zum Vergleich. Dies vereinfacht den Code , wenn sie mit nicht eindeutigen Schlüssel zu tun.
stimmen 0
0
Ohne zu sehen, welche Art von Struktur Sie verwenden, ist es schwer, Besonderheiten zu geben, aber man könnte so etwas wie dieser Pseudo-Code versuchen:
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;
}
}
stimmen 0
0
hier ist psudocode. wandeln sie nur in Syntax.
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