Ancestro común más bajo en un árbol binario de búsqueda

votos
2

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?

Publicado el 06/08/2011 a las 11:25
fuente por usuario
En otros idiomas...                            


3 respuestas

votos
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.

Respondida el 06/08/2011 a las 11:31
fuente por usuario

votos
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;
    }
}
Respondida el 06/08/2011 a las 11:41
fuente por usuario

votos
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
Respondida el 05/09/2014 a las 07:17
fuente por usuario

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