樹與二叉樹

1. 樹的基本概念

1)結點的度:該結點所有孩子結點的總數量。
2)樹的度:樹內各個結點的度的最大值。
3)葉子結點/非葉子結點:度爲0/不爲0的結點爲葉子結點/非葉子結點。
4)結點的層次:定義根結點爲第一層;若某結點在第i層,則其子樹的根就位於第i+1層。
5)樹的高度(深度):樹中結點的最大層次,即離根結點最遠的地方。
6)有序樹/無序樹:若可以將樹中結點的各子樹看成從左到右是有次序的,則它是有序樹,否則則爲無序樹。其最左邊的子樹的根稱爲第一個孩子,最右邊的稱爲最後一個孩子。
7)森林:m棵互不相交的樹的集合。因此對於樹中的每一個結點來說,其子樹的集合即爲森林。

============================
因此可以推出的一些基本性質

1)一棵樹擁有的結點個數等於樹內所有結點度數+1;
2)度爲m的樹,第i層上最多有mi-1個結點;
3)高度爲h的m叉樹,最多擁有(mh-1)/(m-1)個結點。

2. 二叉樹的基本概念

1)二叉樹定義:每個結點最多隻有2棵子樹(即二叉樹中不存在度大於2的結點),並且有左右子樹之分,次序不能隨意顛倒的有序樹。
2)滿二叉樹:高度爲h,且擁有2h-1個結點的二叉樹。(滿結點)
滿二叉樹

3)完全二叉樹:並非滿結點,但是每一層結點必須滿足從左到右不能有“斷檔”。
完全二叉樹

============
因此我們又可以推出二叉樹的一些性質:

1)在二叉樹中,第i層上最多有2i-1個結點(i>=1)。
2)高度爲h的二叉樹,最多擁有2h-1個結點(h>=1)(等比數列求和)。
3)n結點的完全二叉樹的高度爲[log n]<=x + 1。
4)n層完全二叉樹中,對任意結點i(1<=i<=n),則有i = 1則表示是根結點;若i>1,則其父節點爲i/2,子結點爲2i, 2i+1。(注意邊界,可以參看“順序存儲結構”圖輔以理解)
5)n個結點有n+1個空指針(無左右後繼)

3. 二叉樹的存儲結構

1)順序存儲結構——僅適用於完全二叉樹
完全二叉樹順序存儲結構

如果用在一般二叉樹,則是
一般二叉樹順序存儲結構
“#”表示該結點爲NULL。
所以我們可以推出如果是一棵只有k個結點深度爲k的單支樹(即樹中不存在度爲2的結點),需要長度爲2k-1的數組來存儲,嚴重浪費空間。
單支樹

2)鏈式存儲結構——專治一般二叉樹
鏈式結構一般至少包含3個域:數據、左子樹、右子樹,此時稱爲二叉鏈表。然而有時爲了方便查找父節點,在二叉鏈表的基礎上再添加一個域:“父節點”,此時稱爲三叉鏈表。
一般二叉樹鏈式存儲結構

reference:
嚴蔚敏.數據結構C語言版

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章