Cómo encontrar el número de subárboles izquierdo y derecho de un árbol binario

Como entendí por su pregunta, desea etiquetar cada vértice como el hijo izquierdo / derecho de su padre.

Esto se puede hacer mediante cualquier tipo de algoritmo transversal de árbol ( DFS , BFS , etc.) mientras se mantienen dos contadores, uno para el número de vértices izquierdos (llamémoslo cntL ) y el otro para los correctos (llamémoslo cntR )

para un DFS que comienza desde la raíz, el algoritmo será algo como esto:

  1. compruebe si existe un hijo izquierdo , en caso afirmativo
    1. aumente cntL en [matemáticas] 1 [/ matemáticas], luego llame a DFS en el niño izquierdo
  2. verifique si existe el niño correcto , si es así, entonces
    1. aumente cntR en [matemáticas] 1 [/ matemáticas], luego llame a DFS en el niño correcto

cuando el algoritmo termina, cntR y cntL contendrán las respuestas requeridas.

Tu respuesta es correcta. Es una solución bastante simple. Simplemente cuente recursivamente el niño izquierdo y el derecho, comenzando en la raíz. Si tampoco está allí, devuelva 0 para esa posición.

  1. Prepare dos contadores, uno para el subárbol izquierdo y otro para el derecho.
  2. Atraviese el árbol con cualquier algoritmo de búsqueda (profundidad primero, respiración primero, etc.) De modo que cada nodo sea “visitado” una vez.
  3. En cada nodo, la “visita” hace lo siguiente:
  • Ha dejado subárbol? Incremento de contador izquierdo
  • Tiene derecho? Incremento a la derecha.

El número de subárboles de un nodo es el subárbol enraizado en ese nodo, más el número de subárboles de su hijo izquierdo, más el número de subárboles de su hijo derecho.

Entonces, escriba un procedimiento recursivo que use esa regla.

En realidad, no estoy seguro de entender la pregunta, ¿quieres decir algo específico con “subárboles izquierdos” y “subárboles derechos”?

More Interesting

¿Cuál es la mejor manera de aprender estructuras de datos y cuáles son los libros para comprender esto fácilmente?

¿Cuál es el punto de usar programación dinámica cuando la complejidad de tiempo en la mayoría de los códigos es O (n ^ 2) (que no es tan bueno, es decir, usamos dobles para bucles incluso en DP)?

Quiero comparar una consulta con varios documentos y asignarles una clasificación. ¿Qué algoritmo necesito usar?

¿Cuál es el código C ++ más simple para el algoritmo A *?

¿Qué aplicaciones no son adecuadas para quicksort y por qué?

¿Cuál es la diferencia entre usar <y <= en la búsqueda binaria?

¿Cómo podemos verificar de forma recursiva si una lista vinculada individualmente es un palíndromo?

¿Cómo pasan su tiempo exactamente los participantes en varios sitios de codificación de algoritmos?

Si solo quiero escribir algoritmos y lógica, y no quiero molestarme con la interfaz de usuario y la codificación frontal, ¿qué tipo de posición de software me conviene más?

Cómo comenzar a crear un modelo / pronóstico de ventas con dos años y medio de datos de ventas anteriores

¿Cuáles son los usos prácticos de 2-3 árboles o árboles rojo-negros?

¿Qué es una explicación intuitiva de union-find?

¿Cómo visualizo el laberinto que estoy creando?

Cómo demostrar que este gráfico todavía puede estar fuertemente conectado

¿Cuál es la aplicación del problema N-Queens en el mundo real? ¿Es aplicable en problemas de localización o enrutamiento?