¿Cuándo es bueno representar un árbol binario como una matriz?

La alternativa de no implementar árboles binarios como matrices es usar punteros que no son tan fáciles de entender o depurar en cada lenguaje de programación.

Además, la implementación de árboles binarios como una matriz también proporciona algunos beneficios, como convertir una primera búsqueda de Breadth en una simple iteración sobre la matriz y O (1) acceder a cualquier nodo en el árbol en lugar de atravesar un puntero a otro. Además, las matrices son compatibles con casi todos los lenguajes de programación.

Recuerdo haber recibido una excepción de puntero nulo en C ++ unas horas antes de la presentación de una tarea en el proceso de decisión de Markov para encontrar una estrategia óptima en el blackjack. En lugar de perder tiempo depurándolo (me habría llevado mucho tiempo ya que era mi segundo día trabajando con C ++), reimplementé el árbol como una matriz, arreglé algunos errores y lo presenté antes de la fecha límite.

La mayoría de las respuestas cubren los aspectos principales de la implementación, pero me gustaría agregar una cosa más, que es la velocidad, es fácil acceder a cualquier elemento en un árbol implementado como una matriz en lugar del implementado como una lista (u objetos de clase, dependiendo de la elección).

¿Por qué?

Esto se debe a que en el caso de los elementos de matriz en cualquier posición se puede acceder en un tiempo casi constante, pero en el caso de la lista (u objetos de clase, dependiendo de la elección de la implementación), si desea acceder a un elemento que se coloca en la parte inferior de el árbol, entonces literalmente tendría que comenzar a buscar desde el nodo raíz porque la dirección del elemento requerido se almacena en el elemento que se encuentra arriba y así sucesivamente, por lo que esa es la razón por la que debe comenzar desde el principio cada vez que desee para ir al final (o cualquier otro lugar).

Por lo tanto, si va a agregar o eliminar elementos regularmente de la lista, usar la lista para implementar un árbol sería económico porque es fácil cambiar los punteros para direccionar que cambiar los elementos de una matriz.

Si su tarea regular se va a recuperar, la matriz sería una mejor opción debido a la razón que expliqué anteriormente.

Verá que ambos tipos de implementación tienen sus ventajas.

Perdón por no usar imágenes, habría sido más fácil de explicar pero no pude encontrar ninguna.

1.Cuando está completo o lleno (como este)

No esta

Aquí el índice de X es i (x).

i (10) = 1, i (20) = 3, i (30) = 7, i (40) = 15, i (50) = 31

Entonces, para 5 nodos, el tamaño de la matriz será 31, no es eficiente.

En el caso del ” árbol binario completo “, puede usar una estructura de datos de matriz porque solo en este caso, el desperdicio de memoria debe ser negociable o cero.

Nota : – Si se menciona en la pregunta, solo usted puede usar la matriz; de lo contrario, prefiera la lista vinculada