Árbol de Python y algoritmo de árbol

El concepto de un árbol: un árbol es un tipo de datos abstractos (ADT) que se utiliza para simular un conjunto de datos con una estructura similar a un árbol. Consta de n> = 1 nodos finitos para formar un conjunto con una relación jerárquica:
cada nodo tiene cero o Múltiples nodos secundarios; los nodos
sin nodos primarios se denominan nodos raíz;
cada nodo no raíz tiene solo un nodo primario; a
excepción del nodo raíz, cada nodo secundario puede dividirse en múltiples subárboles separados
Inserte la descripción de la imagen aquí

Algunos términos del árbol:
(1) El grado de un nodo: el número de subárboles contenidos en un nodo se llama el grado del nodo
(2) el grado del árbol: el grado del nodo más grande en un árbol
(3) el nodo hoja: el grado Nodo cero
(4) Nodo primario: un nodo contiene nodos secundarios, luego este nodo se llama nodo secundario del nodo
(5) Nodo secundario : un nodo contiene un nodo de subárbol, llamado nodo secundario del nodo
(6) Nodos hermanos: los nodos con el mismo
nodo padre se denominan nodos hermanos (7): a partir de la definición del nodo raíz, la raíz es la primera capa, los hijos de la raíz son la segunda capa, y así sucesivamente
(8) Altura o profundidad: el nivel máximo de los nodos en el árbol
(9) nodos primos: los nodos cuyos nodos padres están al mismo nivel son primos entre sí
(10) Los antepasados ​​del nodo: todos los nodos en la rama desde la raíz hasta el nodo
(11) descendientes Cualquier nodo en un subárbol enraizado en un determinado nodo se llama
bosque descendente (12) del nodo : el bosque consiste en una colección de n árboles disjuntos

Tipos de árboles:
(1) Árbol desordenado: no existe una relación de orden entre los nodos hijos de ningún nodo del árbol. Este árbol se llama árbol desordenado.
(2) Árbol ordenado:
- (1) Árbol binario: cada nodo contiene como máximo El árbol de dos subárboles se llama árbol binario. Los tipos de árboles binarios son: árbol binario completo, árbol binario balanceado, árbol binario ordenado
- (2) árbol Huffman
- (3) árbol B

Almacenamiento en árbol
(1) Almacenamiento secuencial: almacenando la estructura de datos en una matriz fija, la velocidad transversal tiene ventajas, pero el espacio es relativamente grande
(2) almacenamiento en cadena: el árbol binario generalmente usa almacenamiento en cadena, el defecto es el puntero del campo del puntero El número de es indefinido, la solución: convertir el árbol de múltiples horquillas en un árbol binario para procesar

Como no se puede captar el número de nodos, las representaciones de almacenamiento de los árboles comunes se convierten en árboles binarios para su procesamiento, y el número de nodos secundarios es como máximo 2

Algunos escenarios de aplicación de árbol comunes
1.xml, html, etc., luego, al escribir un analizador para estas cosas, es inevitable usar el árbol
2. El protocolo de enrutamiento es usar el algoritmo del árbol
3. índice de la base de datos mysql 4.
directorio del sistema de archivos Estructura
5. Muchos algoritmos clásicos de IA son en realidad búsquedas de árboles. Además, el árbol de decisión en el aprendizaje automático también es una estructura de árbol
. El uso de árboles en la vida real es muy común

Árbol binario: un árbol binario es una estructura de árbol con hasta dos subárboles por nodo. Los subárboles generalmente se llaman subárboles izquierdo y derecho

Las características del árbol binario:
(1) Propiedad 1: hay como máximo 2 ^ (i-1) nodos en la capa i-ésima del
árbol binario (2) El árbol binario de profundidad k tiene como máximo 2 ^ i-1 nodo
(3) Cualquier árbol binario , Si el número de nodos hoja es N0 y el número total de nodos con grado 2 es N1, entonces N0 = N1 + 1
(4) La profundidad de un árbol binario completo con n nodos debe ser: log (n + 1)

Tipos de árboles binarios: árboles binarios
completos: a excepción de la última capa, el número de nodos en cada capa alcanza el número máximo, y los nodos hoja están ordenados de izquierda a derecha

Árbol binario completo: cada nodo, excepto el nodo hoja, tiene cotiledones izquierdo y derecho y el nodo hoja está en la parte inferior del árbol binario, cada capa está llena de nodos

Estructura de datos del árbol binario: implementación de Python

节点的数据结构:数据区、左链接区、右链接区
class Node(object):
    """节点类"""
    def __init__(self, elem=0, lchild=None, rchild=None):
        self.elem = elem
        self.lchild = lchild
        self.rchild = rchild
 树的创建,创建一个树结构,添加根节点,开始为空树,然后按照广度优先(层序遍历:横向)来添加节点
 【拓展: ---深度优先(纵向:通常有三种遍历方式)】
 class Tree(object):
    """树类"""
    def __init__(self, root=None):
        self.root = root
   """通过层序遍历来添加节点"""

    def add(self, elem):
        """为树添加节点"""
        node = Node(elem)
        #如果树是空的,则对根节点赋值
        if self.root == None:
            self.root = node
        else:
            queue = []
            queue.append(self.root)
            #对已有的节点进行层次遍历
            while queue:
                #弹出队列的第一个元素
                cur = queue.pop(0)
                if cur.lchild == None:
                    cur.lchild = node
                    return
                elif cur.rchild == None:
                    cur.rchild = node
                    return
                else:
                    #如果左右子树都不为空,加入队列继续判断
                    queue.append(cur.lchild)
                    queue.append(cur.rchild)
129 artículos originales publicados · Me gusta 43 · Visitas 100,000+

Supongo que te gusta

Origin blog.csdn.net/nbxuwentao/article/details/104606165
Recomendado
Clasificación