le mie informazioni di contatto
Posta[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Questo articolo inizierà con i concetti relativi agli alberi e agli alberi binari per aiutarci a conoscere meglio gli alberi binari.
🌈个人主页:E' il cameriere
🌈C语言笔记专栏:Appunti sul linguaggio C
🌈C++笔记专栏: Note sul C++
🌈初阶数据结构笔记专栏: Cenni elementari sulla struttura dei dati
🌈喜欢的诗句:无人扶我青云志 我自踏雪至山巅
L'albero è una struttura dati non lineare, composta dan(n>=0)
I nodi limitati formano un insieme con una relazione gerarchica. Tuttavia, l'albero ha poco valore nella pratica, ma l'albero binario ha un valore pratico maggiore (il motivo per cui questo insieme è chiamato albero è che ha la radice rivolta verso l'alto e le foglie. rivolto verso il basso. Sembra molto simile a un albero)
M(M>0)
insiemi disgiuntiT1、T2、....、Tm
, ciascun set dei qualiTi(1<=i<=m)
È un altro sottoalbero con una struttura simile a quella di un albero. Il nodo radice di ogni sottoalbero ha uno ed un solo predecessore e può avere 0 o più successori.Poiché la struttura ad albero è più complessa della tabella lineare, il metodo di memorizzazione è più macchinoso. È necessario salvare sia l'intervallo di valori che la relazione tra i nodi.
Ecco diversi metodi basati sulle conoscenze precedenti:
typedef int DataType;
struct Node
{
struct Node* _firstChild1; // 第一个孩子结点
struct Node* _pNextBrother; // 指向其下一个兄弟结点
DataType _data; // 结点中的数据域
};
Naturalmente, i metodi di cui sopra non sono limitati e ci sono anche espressioni genitore, espressioni figlio, espressioni genitore figlio ed espressioni fratello figlio, ecc.Qui comprenderemo brevemente quelli più comunemente utilizzatirappresentanza del fratello minore
Un albero binario è un insieme finito di nodi. Questo insieme può avere due situazioni:
Dalla figura si possono trarre due conclusioni:
In un albero binario non esistono nodi con grado maggiore di 2
I sottoalberi di un albero binario possono essere divisi in sottoalberi sinistro e destro e l'ordine non può essere invertito, quindi l'albero binario è un albero ordinato.
Avviso: Per qualsiasi albero binario, è composto dalle seguenti situazioni (La situazione dell’albero vuoto è più facile da dimenticare)
Per riassumere brevemente:
Ogni livello di un albero binario completo è pieno
Se l'altezza di un albero binario completo è n, allora i primi n-1 livelli sono pieni, ma l'ultimo livello potrebbe non essere pieno.Ma deve essere continuo da sinistra a destra
Un albero binario completo è una struttura dati molto efficiente e un albero binario completo è un tipo speciale di albero binario completo.
Un albero binario completo è una condizione necessaria e sufficiente per un albero binario completo
Questo è un albero binario ordinario, che non è continuo da sinistra a destra.
Gli alberi binari possono generalmente essere memorizzati in due strutture, una è una struttura sequenziale e l'altra è una struttura a catena.
L'archiviazione della struttura sequenziale consiste nell'utilizzare gli array per archiviare,Generalmente gli array sono adatti solo per rappresentare alberi binari completi. , perché se l'albero binario non è pieno, ci sarà uno spreco di spazio. In realtà, solo l'heap utilizzerà gli array per l'archiviazione. La memorizzazione sequenziale di alberi binari è fisicamente un array e logicamente un albero binario. Per risolvere la domanda successiva, dobbiamo utilizzare la combinazione di un array fisico e di un albero binario logicamente.
leftchild = parent * 2 + 1;
rightchild = paretn * 2 +2;
parent = (child - 1) / 2;
(Non distingue tra bambini di destra e di sinistra)
Per quanto riguarda il terzo punto, sulla base di un ragionamento personale,leftchild
Il pedice è suddiviso inleftchild- 1
E1
,perleftchild-1
perparent
pedice due volte, per(child - 1) / 2
L'operatore lo faràleftchild
Tiralo fuori come1
Parzialmente diviso per 2, il numero intero è 0,leftchild -1
Una parte di esso può essere vista comeleftchild
,Erightchild与leftchild相差1
,Perchérightchild = leftchild - 1
e attraverso sopraleftchild - 1 ~= leftchild
, si può dedurre cherightchild = leftchild(在进行/2运算,取整数情况下)
La struttura di archiviazione collegata di un albero binario significa che viene utilizzata una lista collegata per rappresentare un albero binario, ovvero viene utilizzata una catena per indicare la relazione logica degli elementi. Il metodo usuale prevede che ciascun nodo nell'elenco collegato sia costituito da tre campi, il campo dati e i campi del puntatore sinistro e destro. I puntatori sinistro e destro vengono utilizzati per fornire gli indirizzi di archiviazione dei punti di collegamento dove si trovano il figlio sinistro e il figlio destro del nodo si trovano rispettivamente.Le strutture a catena sono divise in catene binarie e catene triforcate. Al momento, nei nostri studi utilizziamo generalmente catene binarie. Successivamente, quando impareremo strutture di dati di ordine elevato come gli alberi rosso-neri, verranno utilizzate le catene triforcate.
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; // 当前节点值域
};
L'archiviazione della struttura sequenziale viene archiviata tramite array.In generale, gli array sono adatti solo per alberi binari completi. Gli alberi binari non completi non sono adatti per l'archiviazione di strutture di array. Gli alberi binari ordinari sono adatti solo per l'archiviazione di strutture a catena. . Ma in realtà, gli array vengono utilizzati per l'archiviazione solo quando vengono utilizzati gli heap e la maggior parte di essi viene archiviata tramite strutture a catena.
il motivo è:
Quanto sopra è tutto il contenuto di questo articolo. Grazie a tutti per aver letto! Ecco gli appunti di Dian Xiaoer sulle strutture dati elementari. Spero che ti saranno utili per imparare le strutture dati elementari!