數據結構與算法之二叉樹的基本概念和類型

1、二叉樹的基本概念算法

二叉樹:二叉樹是每一個節點最多有兩個子樹的樹結構。
根節點:一棵樹最上面的節點稱爲根節點。
父節點子節點:若是一個節點下面鏈接多個節點,那麼該節點稱爲父節點,它下面的節點稱爲子 節點。
葉子節點:沒有任何子節點的節點稱爲葉子節點。
兄弟節點:具備相同父節點的節點互稱爲兄弟節點。
節點度:節點擁有的子樹數。上圖中,13的度爲2,46的度爲1,28的度爲0。
樹的深度:從根節點開始(其深度爲0)自頂向下逐層累加的。上圖中,13的深度是1,30的深度是2,28的深度是3。
樹的高度:從葉子節點開始(其高度爲0)自底向上逐層累加的。54的高度是2,根節點23的高度是3。
對於樹中相同深度的每一個節點來講,它們的高度不必定相同,這取決於每一個節點下面的葉子節點的深度。上圖中,13和54的深度都是1,可是13的高度是1,54的高度是2。
2、二叉樹的類型
類型 定義 圖示
滿二叉樹
Full Binary Tree
除最後一層無任何子節點外,每一層上的全部節點都有兩個子節點,最後一層都是葉子節點。知足下列性質:
1)一顆樹深度爲h,最大層數爲k,深度與最大層數相同,k=h;
2)葉子節點數(最後一層)爲2k−1
3)第 i 層的節點數是:2i−1
4)總節點數是:2k1,且總節點數必定是奇數。
徹底二叉樹
Complete Binary Tree
若設二叉樹的深度爲h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第 h 層全部的結點都連續集中在最左邊,這就是徹底二叉樹。知足下列性質:
1)只容許最後一層有空缺結點且空缺在右邊,即葉子節點只能在層次最大的兩層上出現;
2)對任一節點,若是其右子樹的深度爲j,則其左子樹的深度必爲j或j+1。 即度爲1的點只有1個或0個;
3)除最後一層,第 i 層的節點數是:2i−1
4)有n個節點的徹底二叉樹,其深度爲:log2n+1或爲log2n+1
5)滿二叉樹必定是徹底二叉樹,徹底二叉樹不必定是滿二叉樹。
平衡二叉樹
Balanced Binary Tree
又被稱爲AVL樹,它是一顆空樹或左右兩個子樹的高度差的絕對值不超過 1,而且左右兩個子樹都是一棵平衡二叉樹。
二叉搜索樹
Binary Search Tree
又稱二叉查找樹、二叉排序樹(Binary Sort Tree)。它是一顆空樹或是知足下列性質的二叉樹:
1)若左子樹不空,則左子樹上全部節點的值均小於或等於它的根節點的值;
2)若右子樹不空,則右子樹上全部節點的值均大於或等於它的根節點的值;
3)左、右子樹也分別爲二叉排序樹。
紅黑樹
Red Black Tree
是每一個節點都帶有顏色屬性(顏色爲紅色或黑色)的自平衡二叉查找樹,知足下列性質:
1)節點是紅色或黑色;
2)根節點是黑色;
3)全部葉子節點都是黑色;
4)每一個紅色節點必須有兩個黑色的子節點。(從每一個葉子到根的全部路徑上不能有兩個連續的紅色節點。)
5)從任一節點到其每一個葉子的全部簡單路徑都包含相同數目的黑色節點。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3、如何設計一個二叉樹的數據結構
一、二叉查找樹(BST)由節點組成,因此能夠先定義一個節點類,用來保存節點數據和其餘節點的連接(left和right);
二、再定義一個二叉查找樹類,讓類只包含一個數據成員:一個表示二叉查找樹根節點的Node對象。該類的構造函數將根節點初始化爲 null,以此建立一個空節點;
三、BST 先要有一個 insert() 方法,用來向樹中加入新節點;
四、其次檢查 BST 是否有根節點,若是沒有,那麼這是棵新樹,該節點就是根節點,這個方法到此就完成了,不然,進入下一步;
五、若是待插入節點不是根節點,那麼就須要準備遍歷 BST,找到插入的適當位置。該過程相似於遍歷鏈表。用一個變量存儲當前節點,一層層地遍歷 BST
六、進入 BST 之後,下一步就要決定將節點放在哪一個地方。找到正確的插入點時,會跳出循環。查找正確插入點的算法以下:
(1)設根節點爲當前節點。
(2)若是待插入節點保存的數據小於當前節點,則設新的當前節點爲原節點的左節點;反之,執行第 4 步。
(3)若是當前節點的左節點爲 null,就將新的節點插入這個位置,退出循環;反之,繼續執行下一次循環。
(4)設新的當前節點爲原節點的右節點。
(5)若是當前節點的右節點爲 null,就將新的節點插入這個位置,退出循環;反之,繼續執行下一次循環。
相關文章
相關標籤/搜索