二叉樹基礎

什麼是樹?

“樹”這種數據結構類似於我們生活中的“樹”,樹裏面的每個元素我們稱之爲“節點”;用來連接相鄰節點之間的關係,我們叫作“父子關係”。關於樹,有幾個相關的概念:高度(Height)深度(Depth)層(Level)。它們的定義是:

節點的高度 = 節點到葉子節點的最長路徑

節點的深度 = 根節點到這個葉子節點所經歷的邊的個數

節點的層數 = 節點的深度 + 1

樹的高度 = 根節點的高度

如下圖:

二叉樹(Binary Tree)

二叉樹,顧名思義,每個節點最多倆個“叉”,也就是兩個節點,分別是左子節點和右子節點。不過,二叉樹不要求每個節點都有倆個節點,有的節點只有左子節點;有的節點只有右子節點;有的節點既沒有左子節點,又沒有右子節點,這種節點稱之爲葉子節點。如下圖:

 

上圖中有三種二叉樹,其中編號2和3這兩個二叉樹比較特殊。

編號2的二叉樹中,葉子節點都在最低層,除了葉子節點之外,每個節點都有左右兩個子節點,這種二叉樹叫作滿二叉樹

編號3的二叉樹中,葉子節點都在最底下兩層,最後一層的葉子節點都靠左排列,並且除了最後一層,其他層的節點個數都要達到最大,這種二叉樹叫作完全二叉樹

如何表示(或者存儲)一棵二叉樹

想要存儲一棵二叉樹,我們有兩種方法,一種是基於指針或者引用的二叉鏈式存儲法,大部分二叉樹代碼都是通過這種結構實現的。而另一種則是基於數組的順序存儲法

如果某棵二叉樹是一棵完全二叉樹,那用數組存儲無疑是最節省內存的一種方式。因爲數組的存儲方式並不像鏈式存儲那樣,要存儲額外的左右子節點的指針。這也是完全二叉樹爲什麼要求最後一層的子節點都靠左的原因。堆,其實就是一種完全二叉樹,最常用的存儲方式是數組。

總之:二叉樹既可以用鏈式存儲,也可以用數組存儲。數組順序存儲的方式比較適合完全二叉樹,其它類型的二叉樹用數組存儲會比較浪費空間。除此之外,二叉樹李非常重要的操作就是前、中、後序遍歷操作,遍歷的時間複雜度是O(n)。

二叉樹最大的特點

支持動態數據集合的快速插入、刪除、查找操作。

  

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