Estructura y algoritmo de datos: la parte básica de la estructura del árbol

Prefacio

Este artículo explica principalmente árboles binarios, árboles binarios de almacenamiento secuencial y árboles binarios enhebrados.


Estructura de datos y lista de artículos sobre algoritmos

Estructura de datos y lista de artículos sobre algoritmos: haga clic aquí para saltar a la vista


Tabla de contenido

Inserte la descripción de la imagen aquí


(1) Árbol binario

(1) Por qué utilizar árboles

1) Analizar las ventajas y desventajas de las matrices
Ventajas : consultar elementos de acuerdo con el índice, puede almacenar grandes cantidades de datos, conveniente para atravesar matrices de acuerdo con el índice
Desventajas : buscar elementos según el contenido es lento, el tamaño de la matriz no se puede cambiar una vez Si se determina, el arreglo solo puede almacenar un tipo de datos, agregar y eliminar elementos es lento y no se encapsula ningún método, todas las operaciones deben ser definidas por el usuario.
Diagrama de matriz:
Inserte la descripción de la imagen aquí

2) Analizar las ventajas y desventajas de la lista enlazada.
Ventajas : Es conveniente agregar y eliminar.
Desventajas : Al buscar un valor determinado, es necesario atravesar desde el nodo principal, el cual es relativamente ineficiente.
Diagrama de operación:
Inserte la descripción de la imagen aquí

3) El análisis de los métodos de almacenamiento de árboles
puede mejorar la eficiencia del almacenamiento y la lectura de datos.
Ejemplo: [7, 3, 10, 1, 5, 9, 12]
Inserte la descripción de la imagen aquí


(2) Diagrama de árbol

Inserte la descripción de la imagen aquí
Términos comunes de árbol (combinados con comprensión esquemática):

  1. nodo
  2. Nodo raíz
  3. Nodo padre
  4. Nodo hijo
  5. Nodos hoja (nodos sin nodos secundarios)
  6. Peso del nodo (valor del nodo)
  7. Ruta (Encuentra la ruta del nodo desde el nodo raíz)
  8. Suelo
  9. Subárbol
  10. Altura del árbol (número máximo de capas)
  11. Bosque: varios subárboles forman un bosque.

(3) El concepto de árbol binario

  1. El árbol ordenado cuyo grado de nodo no es mayor que 2 se denomina árbol binario.
  2. Los nodos secundarios del árbol binario se dividen en nodos izquierdo y derecho.
    Diagrama esquemático:
    Inserte la descripción de la imagen aquí
  3. Si un árbol binario tiene solo nodos con grado 0 y nodos con grado 2, y los nodos con grado 0 están en el mismo nivel, lo llamamos árbol binario completo.
    Inserte la descripción de la imagen aquí
  4. Un árbol binario con una profundidad de k y n nodos se denomina árbol binario completo si y solo si cada uno de sus nodos corresponde a los nodos numerados de 1 an en el árbol binario completo de profundidad k.
    Inserte la descripción de la imagen aquí

(4) Descripción del recorrido del árbol binario

  1. Travesía de preorden: primero da salida al nodo principal, luego atraviesa los subárboles izquierdo y derecho
  2. Cruce de orden medio: primero atraviesa el subárbol izquierdo, luego genera el nodo principal y luego atraviesa el subárbol derecho
  3. Recorrido posterior al orden: primero recorra el subárbol izquierdo, luego recorra el subárbol derecho y finalmente genere el nodo principal
  4. Resumen: observe el orden de los nodos principales de salida para determinar si es el pedido anticipado, el pedido medio o el pedido posterior

(5) Ejemplos de aplicación de recorrido de árbol binario (pedido anticipado, pedido medio, pedido posterior)

Descripción e ideas de ejemplos de aplicación
Inserte la descripción de la imagen aquí
Código de recorrido de árbol binario (haga clic en el enlace a continuación para ver el código fuente)
Ejemplos de aplicación de recorrido de árbol binario (pre-pedido, orden medio, post-pedido)


(6) Árbol binario: busque el nodo especificado (pedido anticipado, pedido medio, pedido posterior)

Afirmar:

  1. Escriba los métodos de búsqueda de pedidos anticipados, búsqueda de orden intermedio y búsqueda de pedidos posteriores.
  2. Y use tres métodos de búsqueda respectivamente para encontrar nodos con heroNO = 5
  3. Y analice los distintos métodos de búsqueda, cuántas veces se han comparado

  4. Inserte la descripción de la imagen aquí
    Código del diagrama de análisis de ideas (haga clic en el enlace de abajo para ver el código fuente): Árbol binario :
    busque el nodo especificado (preorden, orden medio, postorder)

(7) nodo de eliminación de árbol binario

Afirmar:

  1. Si el nodo eliminado es un nodo hoja, elimine el nodo
  2. Si el nodo eliminado es un nodo no hoja, elimine el subárbol.
  3. Pruebe, elimine el nodo hoja No. 5 y el subárbol No. 3.
  4. Complete el
    Inserte la descripción de la imagen aquí
    código de análisis de la idea de eliminación (haga clic en el enlace de abajo para ver el código fuente):
    Binary Tree-Delete Node

(Dos) almacenamiento secuencial de árboles binarios

(1) El concepto de almacenamiento secuencial de árboles binarios

Instrucciones básicas:
desde la perspectiva del almacenamiento de datos, el método de almacenamiento de matriz y el método de almacenamiento de árbol se pueden convertir entre sí, es decir, una matriz se puede convertir en un árbol y un árbol también se puede convertir en una matriz. Consulte el diagrama esquemático de la derecha.
Inserte la descripción de la imagen aquí
Afirmar:

  1. El nodo del árbol binario de la derecha requiere una matriz para almacenar arr: [1, 2, 3, 4, 5, 6, 6]
  2. Se requiere que al atravesar la matriz arr, los nodos aún se puedan atravesar en la forma de recorrido de preorden, recorrido de orden medio y recorrido de postorden.

Las características del árbol binario de almacenamiento secuencial:

  1. Los árboles binarios secuenciales generalmente solo consideran árboles binarios completos
  2. El nodo hijo izquierdo del n-ésimo elemento es 2 * n + 1
  3. El nodo hijo derecho del n-ésimo elemento es 2 * n + 2
  4. El nodo padre del enésimo elemento es (n-1) / 2
  5. n: indica la cantidad de elementos en el árbol binario (comience a numerar con 0 como se muestra en la figura)

(2) Almacenamiento secuencial de recorrido de árbol binario

Requisitos: Proporcionarle una matriz {1, 2, 3, 4, 5, 6, 7}, que requiere un recorrido en un recorrido de preorden de árbol binario. El resultado del recorrido de la preorden debe ser 1, 2, 4, 5, 3, 6, 7

public class ArrBinaryTreeDemo {
    
    
     public static void main(String[] args) {
    
    
          int[] arr = {
    
     1, 2, 3, 4, 5, 6, 7 };
          // 创建一个 ArrBinaryTree
          ArrBinaryTree arrBinaryTree = new  ArrBinaryTree(arr);
          arrBinaryTree.preOrder(); // 1,2,4,5,3,6,7
     }
}

// 编写一个ArrayBinaryTree, 实现顺序存储二叉树遍历
class ArrBinaryTree {
    
    
     private int[] arr;// 存储数据结点的数组
     public ArrBinaryTree(int[] arr) {
    
    
          this.arr = arr;
     }

     // 重载preOrder
     public void preOrder() {
    
    
          this.preOrder(0);
     }

     // 编写一个方法,完成顺序存储二叉树的前序遍历
     /**
      *
      * @param index 数组的下标
      */
     public void preOrder(int index) {
    
    
          // 如果数组为空,或者 arr.length = 0
          if (arr == null || arr.length == 0) {
    
    
              System.out.println("数组为空,不能按照二叉树的前序遍历");
          }
          // 输出当前这个元素
          System.out.println(arr[index]);
          // 向左递归遍历
          if ((index * 2 + 1) < arr.length) {
    
    
              preOrder(2 * index + 1);
          }
          // 向右递归遍历
          if ((index * 2 + 2) < arr.length) {
    
    
              preOrder(2 * index + 2);
          }
     }
}

resultado:

1
2
4
5
3
6
7

(3) Ejemplo de aplicación de árbol binario de almacenamiento secuencial

La ordenación del montón en los ocho algoritmos de ordenación utilizará el árbol binario de almacenamiento secuencial


(3) Árbol binario roscado

(1) Problema

Construya la secuencia {1, 3, 6, 8, 10, 14} en un árbol binario. N + 1 = 7
Inserte la descripción de la imagen aquí
análisis de problemas:

  1. Cuando recorremos el árbol binario anterior en orden, la secuencia numérica es {8, 3, 10, 1, 6, 14}
  2. Sin embargo, los punteros izquierdo y derecho de los nodos 6, 8, 10 y 14 no se utilizan por completo.
  3. ¿Qué pasa si queremos hacer un uso completo de los punteros izquierdo y derecho de cada nodo para que cada nodo pueda apuntar a sus propios nodos frontal y posterior?
  4. Árbol binario de pistas de solución

(2) Introducción básica al árbol binario de pistas

  1. La lista binaria enlazada de n nodos contiene n + 1 [fórmula 2n- (n-1) = n + 1] campos de puntero nulo. Utilice el campo de puntero nulo en la lista binaria vinculada para almacenar punteros a los nodos predecesores y sucesores del nodo en un cierto orden transversal (este tipo de punteros adicionales se denominan "pistas")
  2. Este tipo de lista enlazada binaria con pistas se llama lista enlazada por subprocesos, y el árbol binario correspondiente se llama árbol binario subproceso (árbol binario subproceso). Según la naturaleza de las pistas, el árbol binario de pistas se puede dividir en tres tipos: árbol binario de pistas de preorden, árbol binario de pistas de orden medio y árbol binario de pistas postorder.
  3. El nodo anterior de un nodo se denomina nodo predecesor.
  4. El siguiente nodo después de un nodo se llama nodo sucesor.

(3) Caso de aplicación Cue Binary Tree

Descripción del caso de aplicación: tome el siguiente árbol binario en un árbol binario de pistas en orden. La secuencia de recorrido de orden medio es {8, 3, 10, 1, 14, 6}
Inserte la descripción de la imagen aquí
Análisis de pensamiento: El resultado del recorrido de orden medio: {8, 3, 10, 1, 14, 6}
Inserte la descripción de la imagen aquí
Explicación: Cuando el binario árbol tiene una pista, Nodo Las propiedades del nodo izquierdo y derecho son las siguientes:

  1. left se refiere al subárbol izquierdo, o al nodo predecesor al que apunta. Por ejemplo, ① el subárbol izquierdo apuntado por el nodo izquierdo y la izquierda del nodo ⑩ apunta al nodo predecesor.
  2. right apunta al subárbol derecho, o puede apuntar al nodo sucesor. Por ejemplo, ① node right apunta al subárbol derecho, y ⑩ node right apunta al nodo sucesor

Código (haga clic en el enlace de abajo para ver el código fuente):
Caso de aplicación de árbol binario de pistas


(4) Atraviesa el árbol binario de pistas

  1. Descripción: atraviesa el árbol binario anterior con pistas en orden
  2. Análisis: debido a que el punto de cada nodo cambia después de que se gira el hilo, no se puede utilizar el método transversal original. En este momento, se necesita un nuevo método para atravesar el árbol binario del hilo. Cada nodo se puede atravesar de manera lineal, por lo que no es necesario utilizar el método recursivo, también mejora la eficiencia del recorrido. El orden del recorrido debe ser coherente con el recorrido en orden.
  3. Código (haga clic en el enlace de abajo para ver el código fuente):
    recorra el árbol binario de pistas

Supongo que te gusta

Origin blog.csdn.net/a13027629517/article/details/115263388
Recomendado
Clasificación