A
是樹的根節點,而其他節點可以看作是A
的子節點。T1
,T2
和T3
稱為根節點的子樹。E
的路徑為A→B→E
。F
的祖先是B
和A
。B
的度數為2
。葉子節點的度數總是0
,而在完整的二元樹中,每個節點的度數等於2
。0
。樹的靜態表示
#define MAXNODE 500
struct treenode {
int root;
int father;
int son;
int next;
}
樹的動態表示
struct treenode
{
int root;
struct treenode *father;
struct treenode *son
struct treenode *next;
}
樹資料結構可以分為六個不同的類別。
一般樹(General Tree)按層次順序儲存元素,其中頂級元素始終以0
級作為根元素。 除根節點之外的所有節點都以級別數存在。 存在於同一級別的節點稱為兄弟節點,而存在於不同級別的節點表現出它們之間的父子關係。 節點可以包含任意數量的子樹。 每個節點包含3
個子樹的樹稱為三元樹。
可以將森林(Forests)定義為可以通過刪除根節點並將根節點連線到第一級節點的邊緣來獲得的不相交樹的集合。
二元樹是一種資料結構,其中每個節點最多可以有2
個子節點。 存在於最頂層的節點稱為根節點。 具有0
個子節點的節點稱為葉節點。 二元樹用於表示式評估等應用程式。 我們將在本教學後面詳細討論二元樹。
二元搜尋樹是有序二元樹。 左子樹中的所有元素都小於根,而右子樹中存在的元素大於或等於根節點元素。 二進位制搜尋樹用於電腦科學領域的大多數應用,如搜尋,排序等。
表示式樹用於評估簡單的算術表示式。表示式樹基本上是二元樹,其中內部節點由運算子表示,而葉節點由運算元表示。表示式樹被廣泛用於解決代數表示式,如(a + b)*(a-b)
。 請考慮以下範例。
使用以下代數表示式構造表示式樹:
(a + b) / (a*b - c) + d
競賽樹用於記錄兩名比賽者之間每輪比賽的勝者。 比賽樹也可以稱為選擇樹或獲勝者樹。 外部節點表示正在播放匹配的比賽者,而內部節點表示所播放的匹配的勝者。 在最頂層,比賽的獲勝者作為樹的根節點出現。
例如,在4個比賽者之間進行的比賽樹如下所示。 但是,左子樹中的獲勝者將與右子樹的獲勝者對戰。