標籤:樹 二叉樹 資料結構
前言
前面介紹的棧、隊列都是線性結構(linear structure)。而樹是非線性結構(non-linear structure)。因此,樹中的元素之間一般不存在類似於線性結構的一對一的關係,更多地表現為多對多的關係。直觀地看,它是資料元素(在樹中稱為節點)按分支關係組織起來的結構。顯然,樹形結構是比線性結構更複雜的一種資料結構類型。
一、樹
樹的定義:樹是含有n個節點的有窮集合,其中有一個節點比較特殊稱為根節點。在圖示樹時,用一條邊串連兩個有邏輯關係的節點,這個關係被稱為父子關係。
二、二叉樹
二叉樹(Binary Tree)由節點的有限集合構成。這個集合或者為空白集,或者為由一個根節點(root)和兩棵互不相交,分別稱為這個根的左子樹(left subtree)和右子樹(right subtree)的二叉樹組成的集合。
一棵二叉樹的:
三、樹和二叉樹的主要區別
- 樹中節點的最大度數沒有限制,而二叉樹節點的度不超過2。
- 樹中節點的孩子節點,無左右之分,而二叉樹中是有區分的,即孩子是有區別的:左孩子、右孩子,且次序不可顛倒。
- 樹的結點個數至少為1,而二叉樹的結點個數可以為0。
四、常見概念
- 節點的度:某節點的度定義為該節點孩子節點的個數。
- 葉子節點:度為0的節點。
- 樹的度:一棵樹中,最大的節點的度稱為樹的度。
- 節點的高度:從該節點起到葉子節點的最長簡單路徑的邊數。(簡單路徑:無重複邊的路徑)
- 樹的高度:根節點的高度。
- 節點的層數:從根開始定義起,根為第1層,根的子節點為第2層,以此類推。
- 數的層數:根節點的層數。
- 節點的深度:即該節點的層數。
- 樹的深度:根節點的深度。
- 外節點:葉子節點。
- 內節點:除葉子節點之外的節點。
- 滿二叉樹:二叉樹中節點的度只能是0或2。
- 完全二叉樹:除最後一層,每一層的節點數都達到最大。最後一層若是沒滿,則節點集中在左邊,空的只能是右邊。
註:關於樹深度、層數、高度的定義會有不同的說法:有從0開始計數的,也有從1開始計數的。從哪兒開始計數不是關鍵,關鍵在於一致性,量的寫法要一致。
五、幾個量的關係
- 對於二叉樹,根節點是第一層,則第i層至多有個結點。若共有k層,則最多有節點個。
- 按層次順序對一棵有n個節點的完全二叉樹的所有節點從0到n-1編號。若父節點的編號是i,則左孩子的編號是2*i+1,右孩子的編號是2*i+2。(當然,這是在存在左右孩子的情況下)。同樣的,若孩子(無論左右孩子)節點是i,則父節點是(i-1)/2。
- 對於一棵滿二叉樹,外部節點或者說是葉子節點數是n,則內部節點數是n-1。
- 對於一棵二叉樹,用ni表示度為i的節點個數,則n0=n2+1。證明如下:總節點數n=n0+n1+n2。用e表示邊數,則n=e+1,這是因為除根節點外,每一個節點都和一條邊對應。同時,e=2n2+n1,推出n0+n1+n2=2n2+n1+1,化簡即得n0=n2+1。這個結論用語言表述:二叉樹中,葉子節點比度為2的節點多一個。
- 有n個節點的完全二叉樹,樹高度,即logn向下取整,高度從0計數。
- 在二叉樹中,第i層的第一個節點(最左邊的節點)的編號是,層數從0計數。這個量在選擇排序:樹形選擇中用到了。
六、
專欄目錄:資料結構與演算法目錄