Parent_child_child Bruder Notation des häufig verwendeten Datenstrukturbaums

1. Elterliche Darstellung des Baumes

Wir haben vorher über binäre Bäume gesprochen, und heute werden wir diskutieren, wie man einen gewöhnlichen Baum darstellt. Es gibt drei häufig verwendete Darstellungsmethoden: Elterndarstellung, Kinderdarstellung und Kinderbruderdarstellung. Lassen Sie uns zunächst über die elterliche Notation sprechen. Wie der Name schon sagt, besteht die elterliche Notation darin, den Index des übergeordneten Knotens in jedem Knoten zu speichern. Auf diese Weise kann die strukturelle Beziehung jedes Knotens im Baum ausgedrückt werden, und auf den übergeordneten Knoten kann schnell zugegriffen werden.
Wie in der folgenden Abbildung gezeigt, speichern wir einen normalen Baum in Form einer Liste in Abbildung 2.
Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein
Der spezifische Python-Implementierungscode lautet wie folgt (persönliche Handschrift, gefällt ihm nicht):

#-*- 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. Kindervertretung

Oben haben wir gelernt, wie ein normaler Baum gespeichert werden kann, indem in jedem Knoten ein Zeiger auf seinen übergeordneten Knoten hinzugefügt wird. Lassen Sie uns als Nächstes über die untergeordnete Notation sprechen. Die Idee ist der übergeordneten Notation sehr ähnlich, aber anstatt die Zeigerinformationen des untergeordneten Knotens in jedem Knoten zu speichern, wie in der folgenden Abbildung gezeigt: Ein Knoten kann mehrere untergeordnete Knoten haben, also wir Verwenden Sie eine verknüpfte Liste, um die Indizes von untergeordneten Knoten zu speichern.
Fügen Sie hier eine Bildbeschreibung ein
Der spezifische Implementierungscode lautet wie folgt:

#-*- 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 des Kinderbruders

In den oben beschriebenen Methoden wird ein gewöhnlicher Baum gespeichert. Als Nächstes wird erläutert, wie ein gewöhnlicher Baum in einen Binärbaum konvertiert wird. Wir verwenden die Notation für untergeordnete Geschwister. Jeder Knoten enthält Zeiger auf untergeordnete Knoten und Zeiger auf Geschwisterknoten. Wir machen den untergeordneten Knoten zum linken untergeordneten Knoten des Knotens und den Geschwisterknoten zum rechten untergeordneten Knoten des Knotens. Damit ist die Konvertierung von einem normalen Baum in einen Binärbaum abgeschlossen.
Der spezifische Code lautet wie folgt:

#-*- 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. Der Wald wird in einen Binärbaum umgewandelt

Oben haben wir besprochen, wie man einen gewöhnlichen Baum in einen binären Baum umwandelt, die Notation des kleinen Bruders. Wie konvertiere ich mehrere disjunkte Bäume in binäre Bäume? Dies ist die Umwandlung des Waldes in einen Binärbaum, über den wir als nächstes sprechen werden. Die Kernidee besteht darin, zuerst die Notation des untergeordneten Bruders zu verwenden, um jeden Baum in einen Binärbaum umzuwandeln, und dann den Wurzelknoten des ersten Baums als Wurzelknoten des gesamten Baums und die Wurzelknoten anderer Bäume als Wurzelknoten des ersten Baums zu verwenden. Die Geschwisterknoten und verwenden Sie dann die Notation der untergeordneten Geschwister, um den gesamten Baum miteinander zu verbinden. Der spezifische Prozess ist wie folgt.
Fügen Sie hier eine Bildbeschreibung ein

5. Zusammenfassung

Was wir oben besprochen haben, ist, wie man einen gewöhnlichen Baum darstellt und wie man einen gewöhnlichen Baum oder sogar einen Wald als binären Baum darstellt. Die am häufigsten verwendete Darstellungsmethode ist die Notation von untergeordneten Geschwistern, in der die Indizes von untergeordneten Knoten und Geschwisterknoten in jedem Knoten gespeichert werden. Der untergeordnete Knoten ist der linke untergeordnete Knoten und der Geschwisterknoten ist der rechte untergeordnete Knoten, wodurch ein gewöhnlicher Baum in einen Binärbaum konvertiert wird . Nach dem Konvertieren mehrerer Bäume in einen Binärbaum unter Verwendung der untergeordneten Geschwisternotation als Wurzelknoten kann eine Gesamtstruktur in einen Binärbaum konvertiert werden.

6. Anormales Talent

Ich habe nach der richtigen Antwort gesucht und sie vermisst. Ich fragte, warum es so viele unmögliche Dinge auf dieser Welt gibt. Ich habe das Gefühl, dass ich hart genug gearbeitet habe. Warum ist es immer noch so unbekannt. Wer ist bereit, ein Leben von neun bis fünf zu führen, wer ist bereit zuzugeben, dass er seiner Lieblingsperson in seinem Leben nicht würdig ist. Ich möchte, dass ich etwas anderes mache, weil ich das Gefühl habe, zu gewöhnlich zu leben. Es hat nichts mit den Augen anderer Leute zu tun, aber ich bin dieser Mittelmäßigkeit müde. Ob es das Unterbewusstsein oder das kollektive Bewusstsein ist, ich möchte einfach keine Marionette sein, die von bestimmten Dingen kontrolliert wird. Ich möchte etwas tun, nicht weil es meiner Karriere hilft oder weil es mich herausragend machen kann, nicht aus einem der Gründe, die ich gesagt habe. Nur weil es sonst niemand getan hat. Der sogenannte Chic, das Interessante, der Wert und die Mission haben für mich keinen Reiz, weil solche Schatten in der Geschichte gefunden werden müssen. Was mich fasziniert, sind die undefinierten, bedeutungslosen Dinge, die noch nie passiert sind. Weil einige neue Leben erweckt werden, werden einige neue Fähigkeiten aufgrund von "angeborenem Talent" von selbst erweckt!

Die aktuelle superheiße Douyin Divine Comedy "Friendships" entspricht dem Temperament von Miss Polaris aus "Talented", Sie müssen es gehört haben!

Ich denke du magst

Origin blog.csdn.net/gaobing1993/article/details/108911246
Empfohlen
Rangfolge