二叉樹結構一直以來都是資料結構課程中的重點和難點。在原始的二叉樹的基礎上,有不斷演化出了很多其他基於二叉樹的結構,但是不管從二叉樹衍生出來的結構多麼複雜多變,但是底層對於二叉樹結構的理論和操作都是相通的。所以從最基本的原生二叉樹開始,不斷進行總結和實踐,最終達到理解和掌握原生二叉樹和一些比較有代表性的二叉樹變種的目的。
一、最常見的樹結構
在現實生活中,樹狀結構是十分普遍的。例如在我們的計算機磁碟上儲存的資料夾和檔案,就能夠構成乙個檔案樹結構。其中碟符下儲存有檔案和資料夾,資料夾下又有子檔案和子資料夾,但是檔案之下一定不會有其他子檔案和子資料夾。
在上圖中 :我們稱所有的碟符、資料夾和檔案為樹結構的節點,而連線節點與節點之間的通路,稱之為路徑。如果乙個節點指向另乙個節點(例如資料夾1和檔案2的關係),那麼我們稱上面指出的節點為父節點或者雙親節點(資料夾1),下面被指向的節點為父節點的孩子節點(檔案2)。其中,孩子節點簡稱子節點。
二、二叉樹
上面我們已經了解了什麼是樹結構。那麼,如果在一棵樹中,所有的節點都最多只有兩個分支,那麼這種特殊的樹結構,我們稱之為二叉樹結構。
三、二叉樹節點的結構
然後將這樣的節點串聯起來,我們就得到了單鏈表結構:
public class node
我們將上述節點的結構稍加變化,讓每乙個節點都具有兩個指標域:
然後我們讓其中的每乙個指標都指向另乙個節點,於是乎我們得到如下圖所示的一種結構:
不難看出,上面的兩張圖之間是等價的。所以同樣的,只要我們在單鏈表節點結構的基礎上稍加改造,就能夠得到二叉樹節點的**,習慣性的,我們將乙個父節點左邊的子節點稱之為左孩子節點,右邊的子節點稱之為右孩子節點:
class node
四、根節點、中間節點和葉子節點
根節點:二叉樹最上面的節點,只有子節點,沒有父節點。
中間節點:如果乙個節點既有父節點,又有子節點,那麼我們稱這種節點為中間節點。
葉子節點:如果乙個節點只有父節點,沒有任何子節點,那麼我們稱這種節點為葉子結點。
五、滿二叉樹和完全二叉樹
1、滿二叉樹
如果在乙個二叉樹結構中,除最後一層的葉子結點之外,其餘每乙個節點都必須有兩個子節點,那麼這種二叉樹稱之為滿二叉樹
在乙個滿二叉樹中存在如下特性:
2、完全二叉樹
在乙個二叉樹結構中,如果只有最後一層和倒數第2層存在葉子結點,那麼這個二叉樹就是乙個完全二叉樹
六、其他概念和公式的補充
1、節點的度:乙個節點的度可以簡單的理解為乙個節點孩子節點的數量。在許多面試題中,都使用n 0 、n 1 、n 2 分別表示度為0、度為1、度為2的節點的數量,即有0個孩子節點、1個孩子節點、2個孩子節點的節點數量。
2、在任意一棵二叉樹中,這些節點的數量,之間存在如下關係:
(1)n 2 = n 0 -1:即度為2的節點總比度為0的節點少1個,也就是說,在任意二叉樹中,同時具有左右孩子的節點,總比葉子結點的數量少乙個
(2)從上面的公式我們能夠推導出來:n 總 = n 0 + n 1 + n 2 = 2*n 0 + n 1 -1 = n 1 + 2*n 2 + 1,且n 1= n 總 - n 0 -n 2 = n 總 -2n0 + 1 = n 總 -2*n 2 -
所以,只要我們知道乙個二叉樹中總的節點個數以及度為0或者度為2的節點數量,就能夠推導出其他度的節點的數量
資料結構 樹 基本概念
之前說的線性結構是一對一的關係,這裡的樹就是一對多的資料結構。樹 tree 是n n 0 個結點的有限集。n 0時稱為空樹。在任意一棵非空樹中 1 有且僅有乙個特定的稱為根 root 的結點 2 當n 1時,其餘結點可分為m m 0 個互不相交的有限集 樹的定義其實用到了遞迴的方法,就是說樹的定義之...
資料結構 樹和二叉樹的基本概念
樹是n個結點的有限集合,n 0 時,稱為空樹。在任意空樹中應滿足 有且僅有乙個特定的稱為根的結點 當 n 1時,其餘結點可分為 m 個互不相交的有限集合,其中每個集合本身又是一棵樹,並且成為根節點的子樹。樹的定義是遞迴的,也是一種遞迴的資料結構。有兩個特點 樹的根節點沒有前驅結點,除根節點外的所有結...
資料結構 樹的基本概念
樹與非樹?二叉樹度為二的樹稱為二叉樹。那問題來了,何為度為二呢?其實,度的意思有些兒子的感覺,度為二的意思就是,樹中的節點,其兒子最多有兩個。就像現在的二孩政策,應該比較好理解吧。二叉樹有很多性質 比如,二叉樹第i層最大的節點數2 i 1 其中i 1 二叉樹的節點可以分為三種 1.沒有兒子的結點 度...