Cómo comprobar si hay un círculo en un árbol?
-
21-09-2019 - |
Pregunta
Aquí es un árbol:
Habrá una raíz.
Cada nodo del árbol tiene cero o más hijos.
Se permite que dos nodos puntos al mismo niño. Say, tanto el nodo A y el nodo B tiene niño C.
Sin embargo, se prohíbe que,
Nodo A es un descendiente del nodo B, y Nodo B es un descendiente del nodo A.
Uno de los casos es prohibida
nodo A tiene un hijo del nodo C y el nodo D,
Tanto el nodo C y D tiene un nodo hijo E,
Nodo E tiene un niño de A.
La pregunta es, ¿cómo determinar este círculo de una manera más rápida?
Actualizar : Me doy cuenta de esto es encontrar cualquier ciclo en un grafo dirigido. Justo ahora me las arreglé para pensar en una solución similar al algoritmo de Tarjan.
Gracias por los comentarios.
Solución
primera búsqueda en profundidad a través del árbol. Si en algún momento usted encuentra un nodo que ya está en su pila de vuelta hacia atrás, hay un círculo.
Otros consejos
Los círculos se pueden encontrar por medio de 2 puntos y avanzar ellas a diferentes intervalos. Finalmente, los punteros coincidirán, lo que indica un bucle, o el "más rápido" uno alcanzarán luego terminar. La pregunta por lo general se le pide a las listas enlazadas, sin embargo, no árboles.