comprobar si 2 nodos del árbol están relacionados (es decir ancestro-descendiente)comprobar si 2 nodos del árbol están relacionados (antepasado/descendiente) en O (1) con pre-procesamiento
- resolverlo de O (1) tiempo, se permite con O (N) espacio (N = # de nodos)
- pre-procesamiento
Eso es todo. Voy a ir a mi solución (enfoque) a continuación. Por favor, detente si quieres pensar primero.
Para una pre-procesamiento decidí hacer una pre-orden (ir de forma recursiva a través de la raíz primero, entonces los niños) y dar una etiqueta a cada nodo.
Voy a explicar las etiquetas en los detalles. Cada etiqueta constará de números naturales separados por comas como "1,2,1,4,5"; la longitud de esta secuencia es igual a (la profundidad del nodo + 1). P.ej. la etiqueta de la raíz es "1", los hijos de la raíz tendrán etiquetas "1,1", "1,2", "1,3", etc. Los nodos del siguiente nivel tendrán etiquetas como "1,1,1" , "1,1,2", ..., "1,2,1", "1,2,2", ...
Suponga que "el número de orden" de un nodo es el "1-based index of this node" en la lista secundaria de su elemento primario.
Regla común: la etiqueta del nodo consta de su etiqueta principal seguida de una coma y "el número de orden" del nodo.
Por lo tanto, para responder si dos nodos están relacionados (es decir ancestro-descendiente) en O (1), voy a comprobar si la etiqueta de uno de ellos es "un prefijo" de la etiqueta de la otra. Aunque no estoy seguro si se puede considerar que esas etiquetas ocupan O (N) espacio. Se espera que
Cualquier críticos con correcciones o un enfoque alternativo.
ese es O (N^2) espacio en el peor de los casos, que es que cada nodo tiene un hijo (un fideo). – WeaselFox