2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Dieser Artikel beginnt mit den Konzepten im Zusammenhang mit Bäumen und Binärbäumen, um uns dabei zu helfen, mehr über Binärbäume zu erfahren.
🌈个人主页:Es ist der Kellner
🌈C语言笔记专栏:Hinweise zur C-Sprache
🌈C++笔记专栏: C++-Hinweise
🌈初阶数据结构笔记专栏: Hinweise zur elementaren Datenstruktur
🌈喜欢的诗句:无人扶我青云志 我自踏雪至山巅
Baum ist eine nichtlineare Datenstruktur, bestehend ausn(n>=0)
Begrenzte Knoten bilden eine Menge mit einer hierarchischen Beziehung. Der Baum ist jedoch in der Praxis von geringem Wert, aber der Binärbaum hat einen größeren praktischen Wert (der Grund, warum diese Menge als Baum bezeichnet wird, liegt darin, dass die Wurzel nach oben zeigt und die Blätter nach oben zeigen). nach unten gerichtet. Es sieht aus wie ein Baum.
M(M>0)
disjunkte MengenT1、T2、....、Tm
, jeder Satz davonTi(1<=i<=m)
Es handelt sich um einen weiteren Teilbaum mit einer baumähnlichen Struktur. Der Wurzelknoten jedes Teilbaums hat genau einen Vorgänger und kann 0 oder mehr Nachfolger haben.Da die Baumstruktur komplexer ist als die lineare Tabelle, ist die Speichermethode problematischer. Es ist erforderlich, sowohl den Wertebereich als auch die Beziehung zwischen den Knoten zu speichern.
Hier sind mehrere Methoden, die auf Vorkenntnissen basieren:
typedef int DataType;
struct Node
{
struct Node* _firstChild1; // 第一个孩子结点
struct Node* _pNextBrother; // 指向其下一个兄弟结点
DataType _data; // 结点中的数据域
};
Natürlich sind die oben genannten Methoden nicht eingeschränkt, es gibt auch übergeordnete Ausdrücke, untergeordnete Ausdrücke, untergeordnete Elternausdrücke und untergeordnete Bruderausdrücke usw.Hier werden wir kurz die am häufigsten verwendeten verstehenVertretung des Kindesbruders
Ein Binärbaum ist eine endliche Menge von Knoten. Diese Menge kann zwei Situationen haben:
Aus der Abbildung lassen sich zwei Schlussfolgerungen ziehen:
In einem Binärbaum gibt es keinen Knoten mit einem Grad größer als 2
Die Teilbäume eines Binärbaums können in linke und rechte Teilbäume unterteilt werden, und die Reihenfolge kann nicht umgekehrt werden, sodass der Binärbaum ein geordneter Baum ist.
Beachten: Für jeden Binärbaum besteht er aus den folgenden Situationen (Die Situation mit einem leeren Baum vergisst man am leichtesten)
Um es kurz zusammenzufassen:
Jede Ebene eines vollständigen Binärbaums ist voll
Wenn die Höhe eines vollständigen Binärbaums n beträgt, sind die ersten n-1 Ebenen voll, die letzte Ebene jedoch möglicherweise nicht.Aber es muss von links nach rechts durchgehend sein
Ein vollständiger Binärbaum ist eine sehr effiziente Datenstruktur, und ein vollständiger Binärbaum ist eine spezielle Art eines vollständigen Binärbaums.
Ein vollständiger Binärbaum ist eine notwendige und hinreichende Bedingung für einen vollständigen Binärbaum
Dies ist ein gewöhnlicher Binärbaum, der nicht von links nach rechts kontinuierlich ist.
Binärbäume können im Allgemeinen in zwei Strukturen gespeichert werden, eine ist eine sequentielle Struktur und die andere ist eine Kettenstruktur.
Bei der sequentiellen Strukturspeicherung werden Arrays zum Speichern verwendet.Generell eignen sich Arrays nur zur Darstellung vollständiger Binärbäume. , denn wenn der Binärbaum nicht voll ist, wird Speicherplatz verschwendet. In Wirklichkeit verwendet nur der Heap Arrays zur Speicherung. Die sequentielle Speicherung eines Binärbaums ist physikalisch ein Array und logisch ein Binärbaum. Um die nächste Frage zu lösen, müssen wir die Kombination aus dem physischen Array und dem logischen Binärbaum verwenden, um eine Frage zu lösen.
leftchild = parent * 2 + 1;
rightchild = paretn * 2 +2;
parent = (child - 1) / 2;
(Unterscheidet nicht zwischen linken und rechten Kindern)
Zum dritten Punkt, basierend auf persönlichen Überlegungen,leftchild
Der Index ist aufgeteilt inleftchild- 1
Und1
,fürleftchild-1
fürparent
zweimal tiefgestellt, z(child - 1) / 2
Der Betreiber wirdleftchild
Nehmen Sie es heraus als1
Teilweise durch 2 dividiert, ist die ganze Zahl 0,leftchild -1
Ein Teil davon kann als angesehen werdenleftchild
,Undrightchild与leftchild相差1
,Weilrightchild = leftchild - 1
und durch obenleftchild - 1 ~= leftchild
, daraus lässt sich schließenrightchild = leftchild(在进行/2运算,取整数情况下)
Die verknüpfte Speicherstruktur eines Binärbaums bezieht sich auf die Verwendung einer verknüpften Liste zur Darstellung eines Binärbaums, dh die Verwendung einer Kette zur Angabe der logischen Beziehung von Elementen. Die übliche Methode besteht darin, dass jeder Knoten in der verknüpften Liste aus drei Feldern besteht, dem Datenfeld und den linken und rechten Zeigerfeldern. Die linken und rechten Zeiger werden verwendet, um die Speicheradressen der Verknüpfungspunkte anzugeben, an denen sich das linke und rechte Kind befinden des Knotens liegen jeweils.Kettenstrukturen werden in Binärketten und Dreifachketten unterteilt. Derzeit verwenden wir in unseren Studien im Allgemeinen Binärketten. Wenn wir später Datenstrukturen höherer Ordnung wie Rot-Schwarz-Bäume lernen, werden Dreifachketten verwendet.
typedef int BTDataType;
// 二叉链
struct BinaryTreeNode
{
struct BinTreeNode* _pLeft; // 指向当前节点左孩子
struct BinTreeNode* _pRight; // 指向当前节点右孩子
BTDataType _data; // 当前节点值域
}
// 三叉链
struct BinaryTreeNode
{
struct BinTreeNode* _pParent; // 指向当前节点的双亲
struct BinTreeNode* _pLeft; // 指向当前节点左孩子
struct BinTreeNode* _pRight; // 指向当前节点右孩子
BTDataType _data; // 当前节点值域
};
Der sequentielle Strukturspeicher wird über Arrays gespeichert.Im Allgemeinen eignen sich Arrays nur für vollständige Binärbäume. Nicht vollständige Binärbäume eignen sich nicht für die Speicherung von Array-Strukturen. Gewöhnliche Binärbäume eignen sich nur für die Speicherung von Kettenstrukturen. . In Wirklichkeit werden Arrays jedoch nur dann zur Speicherung verwendet, wenn Heaps verwendet werden, und die meisten davon werden über Kettenstrukturen gespeichert.
der Grund ist:
Das Obige ist der gesamte Inhalt dieses Artikels. Vielen Dank an alle fürs Lesen! Hier sind Dian Xiaoers Anmerkungen zu elementaren Datenstrukturen. Ich hoffe, sie werden Ihnen beim Erlernen elementarer Datenstrukturen hilfreich sein!