Parent_child_child Brother notation de l'arborescence de structure de données couramment utilisée

1. Représentation parentale de l'arbre

Nous avons déjà parlé des arbres binaires, aujourd'hui nous allons discuter de la façon de représenter un arbre ordinaire. Il existe trois méthodes de représentation couramment utilisées: la représentation parentale, la représentation enfant et la représentation enfant frère. Parlons d'abord de la notation parentale, comme son nom l'indique, la notation parentale consiste à stocker l'indice de son nœud parent dans chaque nœud. De cette manière, la relation structurelle de chaque nœud de l'arborescence peut être exprimée et le nœud parent est accessible rapidement.
Comme le montre la figure ci-dessous, nous stockons un arbre ordinaire sous la forme d'une liste dans la figure 2.
Insérez la description de l'image ici
Insérez la description de l'image ici
Le code d'implémentation spécifique de python est le suivant (écriture personnelle, je ne l'aime pas):

#-*- 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. Représentation des enfants

Ci-dessus, nous avons appris un moyen de stocker un arbre normal, en ajoutant un pointeur vers son nœud parent dans chaque nœud. Parlons ensuite de la notation enfant. L'idée est très similaire à la notation parent, mais au lieu de stocker les informations de pointeur du nœud enfant dans chaque nœud, comme illustré dans la figure suivante: un nœud peut avoir plusieurs nœuds enfants, nous Utilisez une liste liée pour stocker les indices des nœuds enfants.
Insérez la description de l'image ici
Le code d'implémentation spécifique est le suivant:

#-*- 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. Notation du frère enfant

Les méthodes décrites ci-dessus sont la façon de stocker un arbre ordinaire, puis nous parlerons de la façon de convertir un arbre ordinaire en un arbre binaire. Nous utilisons la notation des frères et sœurs enfants, chaque nœud contient des pointeurs vers des nœuds enfants et des pointeurs vers des nœuds frères. Nous faisons du nœud enfant le nœud enfant gauche du nœud et du nœud frère le nœud enfant droit du nœud. Ceci termine la conversion d'un arbre normal en un arbre binaire.
Le code spécifique est le suivant:

#-*- 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. La forêt se transforme en arbre binaire

Ci-dessus, nous avons discuté de la façon de convertir un arbre ordinaire en un arbre binaire, la notation enfant frère. Pour aller plus loin, comment convertir plusieurs arbres disjoints en arbres binaires? Il s'agit de la conversion de la forêt en arbre binaire dont nous parlerons ensuite. L'idée de base est d'utiliser d'abord la notation frère enfant pour convertir chaque arbre en un arbre binaire, puis d'utiliser le nœud racine du premier arbre comme nœud racine de l'arbre entier, et les nœuds racine d'autres arbres comme nœud racine du premier arbre. Les nœuds frères, puis utilisez la notation des frères et sœurs enfants pour connecter l'ensemble de l'arborescence. Le processus spécifique est le suivant.
Insérez la description de l'image ici

5. Résumé

Ce que nous avons discuté ci-dessus est de savoir comment représenter un arbre ordinaire et comment représenter un arbre ordinaire ou même une forêt comme un arbre binaire. La méthode de représentation la plus couramment utilisée est la notation enfant-frère, qui stocke les indices des nœuds enfants et des nœuds frères dans chaque nœud. Le nœud enfant est le nœud enfant gauche et le nœud frère est le nœud enfant droit, convertissant ainsi un arbre ordinaire en arbre binaire. . Après avoir converti plusieurs arbres en un arbre binaire, en utilisant la notation enfant pour son nœud racine, une forêt peut être convertie en un arbre binaire.

6. Talent anormal

J'ai cherché la bonne réponse et je l'ai ratée. J'ai demandé pourquoi il y a tant de choses impossibles dans ce monde. J'ai l'impression d'avoir suffisamment travaillé. Pourquoi est-ce encore si inconnu. Qui est prêt à vivre une vie de neuf à cinq ans, qui est prêt à admettre qu'il n'est pas digne de sa personne préférée dans sa vie. Je veux que je fasse quelque chose de différent parce que je sens que je vis trop ordinaire. Cela n'a rien à voir avec les yeux des autres, mais je suis fatigué de cette médiocrité. Que ce soit l'esprit subconscient ou la conscience collective, je ne veux tout simplement pas être une marionnette contrôlée par certaines choses. Je veux faire quelque chose, non pas parce que cela aide ma carrière, ni parce que cela peut me rendre excellent, pas à cause de l'une des raisons que j'ai dites. Juste parce que personne d'autre ne l'a fait. Le soi-disant chic, intéressant, valeur et mission ne m'attirent pas, car de telles ombres doivent être trouvées dans l'histoire. Ce qui me fascine, ce sont les choses indéfinies et dénuées de sens qui ne se sont jamais produites. Parce que de nouvelles vies sont éveillées, de nouvelles capacités sont éveillées par elles-mêmes, à cause du "Talent Inné"!

La récente super-chaude Comédie Divine Douyin "Friendships" correspond au tempérament de Miss Polaris de "Talented", vous devez l'avoir entendu!

Je suppose que tu aimes

Origine blog.csdn.net/gaobing1993/article/details/108911246
conseillé
Classement