Es bastante fácil de encontrar más cercano ancestro común en un BST si todos los elementos son distintos. Pero lo que si alguno de los valores son los mismos. Hasta ahora sólo estábamos comparando los datos de los nodos y eso fue todo, pero no ahora tenemos que comprobar la dirección nodos en lugar de sólo los valores?
Ancestro común más bajo en un árbol binario de búsqueda
votos
2
Publicado el 06/08/2011 a las 11:25 2011-08-06 11:25
fuente por usuario arvind.mohan
En otros idiomas...
fuente por usuario arvind.mohan
En otros idiomas...
3 respuestas
votos 1
1
Si, en lugar de utilizar simplemente el keyde la comparación, utilizar (key, address of node)para la comparación. Esto simplifica el código cuando se trata de teclas que no sean únicos.
votos 0
0
Sin ver qué tipo de estructura que está utilizando, es difícil dar detalles, pero se puede intentar algo como esto pseudocódigo:
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;
}
}
votos 0
0
aquí es psudocode. simplemente convertirlos en sintaxis.
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