Parent_child_child hermano notación del árbol de estructura de datos de uso común

1. Representación parental del árbol

Hablamos de árboles binarios antes y hoy discutiremos cómo representar un árbol ordinario. Hay tres métodos de representación que se utilizan habitualmente: representación de padres, representación de hijos y representación de hermanos menores. Primero hablemos de la notación parental, como su nombre lo indica, la notación parental es almacenar el subíndice de su nodo padre en cada nodo. De esta manera, se puede expresar la relación estructural de cada nodo en el árbol y se puede acceder rápidamente al nodo principal.
Como se muestra en la figura siguiente, almacenamos un árbol ordinario en forma de lista en la Figura 2.
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
El código de implementación de Python específico es el siguiente (escritura personal, no me gusta):

#-*- coding:utf-8 -*-
class Node:
    def  __init__(self,val,parent):
        self.val = val
        self.parent = parent
class tree:
    def __init__(self):
        self._array = []
    def addNode(self,val,parent):
        node = Node(val,parent)
        self._array.append(node)
    def show(self):
        for i,v in enumerate(self._array):
            print('节点下标为 = {} 值为 = {} 父节点下标为{}'.format(i,v.val,v.parent))
    def findparent(self,node):
        return self._array[node.parent]
tree = tree()
tree.addNode('R',-1)
tree.addNode('A',0)
tree.addNode('B',0)
tree.addNode('C',0)
tree.addNode('D',1)
tree.addNode('E',1)
tree.addNode('F',3)
tree.addNode('G',6)
tree.addNode('H',6)
tree.addNode('K',6)
tree.show()
node = Node('K',6)
node_parent = tree.findparent(node)
print('父节点为={}'.format(node_parent.val))

2. Representación infantil

Arriba aprendimos una forma de almacenar un árbol normal, agregando un puntero a su nodo padre en cada nodo. A continuación, hablemos de la notación secundaria. La idea es muy similar a la notación principal, pero en lugar de almacenar la información del puntero del nodo secundario en cada nodo, como se muestra en la siguiente figura: un nodo puede tener varios nodos secundarios, por lo que Utilice una lista vinculada para almacenar los subíndices de los nodos secundarios.
Inserte la descripción de la imagen aquí
El código de implementación específico es el siguiente:

#-*- coding:utf-8 -*-
class Node:
    def  __init__(self,val,children):
        self.val = val
        self.children = children
class childrentree:
    def __init__(self):
        self._array = []
    def addNode(self,val,children):
        node = Node(val,children)
        self._array.append(node)
    def show(self):
        for i,v in enumerate(self._array):
            print('节点下标为 = {} 值为 = {} 孩子节点下标为{}'.format(i,v.val,v.children))
    def findChildren(self,node):
        chilren = [self._array[i].val for i in node.children]
        return chilren
tree = childrentree()
tree.addNode('R',[1,2,3])
tree.addNode('A',[4,5])
tree.addNode('B',[])
tree.addNode('C',[6])
tree.addNode('D',[])
tree.addNode('E',[])
tree.addNode('F',[7,8,9])
tree.addNode('G',[])
tree.addNode('H',[])
tree.addNode('K',[])
tree.show()
node = Node('F',[7,8,9])
node_children = tree.findChildren(node)
print('节点值为={},孩子节点为={}'.format(node.val,node_children))

3. Notación de hermano menor

Los métodos discutidos anteriormente son cómo almacenar un árbol ordinario A continuación, hablaremos sobre cómo convertir un árbol ordinario en un árbol binario. Usamos la notación de hermanos secundarios, cada nodo contiene punteros a nodos secundarios y punteros a nodos hermanos. Hacemos que el nodo hijo sea el nodo hijo izquierdo del nodo y el nodo hermano el nodo hijo derecho del nodo. Esto completa la conversión de un árbol normal a un árbol binario.
El código específico es el siguiente:

#-*- coding:utf-8 -*-
class Node:
    def  __init__(self,val,children,brother):
        self.val = val
        self.children = children
        self.brother = brother
class childrenbrotherree:
    def __init__(self):
        self._array = []
    def addNode(self,val,children,brother):
        node = Node(val,children,brother)
        self._array.append(node)
    def show(self):
        for i,v in enumerate(self._array):
            print('节点下标为 = {} 值为 = {} 孩子节点下标为{},兄弟节点下标为{}'.format(i,v.val,v.children,v.brother))
    def findChildren(self,node):
        chilren = [self._array[i].val for i in node.children]
        return chilren
    def findBrother(self,node):
        brother = [self._array[i].val for i in node.brother]
        return brother
tree = childrenbrotherree()
tree.addNode('R',[1],[])
tree.addNode('A',[4],[2])
tree.addNode('B',[],[3])
tree.addNode('C',[6],[])
tree.addNode('D',[],[5])
tree.addNode('E',[],[])
tree.addNode('F',[7],[])
tree.addNode('G',[],[8])
tree.addNode('H',[],[9])
tree.addNode('K',[],[])
tree.show()
node = Node('F',[7],[])
node_children = tree.findChildren(node)
print('节点值为={},孩子节点为={}'.format(node.val,node_children))

4. El bosque se transforma en un árbol binario

Anteriormente discutimos cómo convertir un árbol ordinario en un árbol binario, la notación de hermano menor. Yendo un paso más allá, ¿cómo convertir múltiples árboles disjuntos en árboles binarios? Esta es la conversión del bosque a un árbol binario del que hablaremos a continuación. La idea central es usar primero la notación de hermano menor para convertir cada árbol en un árbol binario, y luego usar el nodo raíz del primer árbol como el nodo raíz de todo el árbol y los nodos raíz de otros árboles como el nodo raíz del primer árbol. Los nodos hermanos y luego use la notación de hermanos secundarios para conectar todo el árbol. El proceso específico es el siguiente.
Inserte la descripción de la imagen aquí

5. Resumen

Lo que discutimos anteriormente es cómo representar un árbol ordinario y cómo representar un árbol ordinario o incluso un bosque como un árbol binario. El método de representación más utilizado es la notación de hermanos secundarios, que almacena los subíndices de los nodos secundarios y los nodos hermanos en cada nodo. El nodo secundario es el nodo secundario izquierdo y el nodo secundario es el nodo secundario derecho, convirtiendo así un árbol ordinario en un árbol binario. . Después de convertir varios árboles en un árbol binario, utilizando la notación de hermanos secundarios para su nodo raíz, un bosque se puede convertir en un árbol binario.

6. Talento anormal

He estado buscando la respuesta correcta y la he estado perdiendo. Pregunté por qué hay tantas cosas imposibles en este mundo. Siento que he trabajado lo suficiente. ¿Por qué todavía es tan desconocido? Que esté dispuesto a vivir una vida de nueve a cinco, que esté dispuesto a admitir que no es digno de su persona favorita en su vida. Quiero hacer algo diferente porque siento que estoy viviendo de manera demasiado ordinaria. No tiene nada que ver con los ojos de otras personas, pero estoy cansado de esta mediocridad. Ya sea la mente subconsciente o la conciencia colectiva, simplemente no quiero ser un títere controlado por ciertas cosas. Quiero hacer algo, no porque ayude a mi carrera, ni porque pueda hacerme sobresalir, no por ninguna de las razones que dije. Solo porque nadie más lo ha hecho. Lo llamado chic, interesante, valor y misión no me atraen, porque esas sombras deben encontrarse en la historia. Lo que me fascina son las cosas indefinidas y sin sentido que nunca han sucedido. ¡Debido a que se están despertando algunas vidas nuevas, algunas habilidades nuevas están siendo despertadas por sí mismas, debido al "Talento innato"!

La reciente super-caliente Douyin Divine Comedy "Friendships" coincide con el temperamento de Miss Polaris de "Talented", ¡debes haberlo escuchado!

Supongo que te gusta

Origin blog.csdn.net/gaobing1993/article/details/108911246
Recomendado
Clasificación