Jeho docela snadné najít nejbližší společný předek v BST-li všechny prvky jsou zřetelné. Ale co když některé hodnoty jsou stejné. Doteď jsme byli jen srovnáním údajů uzlů a tím to skončilo, ale nyní potřebujeme pro kontrolu adresy uzlů namísto pouhých hodnot?
Nejnižší společný předek v binární vyhledávací strom
hlasů
2
3 odpovědí
hlasů 1
1
Ano, namísto použití právě váš keyke srovnání použít (key, address of node)pro srovnání. To zjednodušuje kód, pokud se jedná o non-unikátních klíčů.
hlasů 0
0
Aniž by viděl, jaké struct, který používáte, je těžké dát specifika, ale můžete zkusit něco takového pseudokódu:
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;
}
}
hlasů 0
0
Zde je psudocode. jen převést do syntaxe.
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













