常用數據結構之二叉樹的特性以及適用場景總結

二叉樹

二叉樹是一個特殊的樹型結構,有一下的特點:

  1. 最多有 2 個子節點,稱爲左節點和右結點。
  2. 左右節點的次序不能顛倒,即使只有一個節點也需要區分是左子節點或者右子節點。

沒有子節點的節點稱爲葉子節點。

完全二叉樹

在二叉樹的基礎上,n 層的完全二叉樹,所有的葉子節點都在第 n 層或者 n - 1 層。
同時左右子節點需要連續。

滿二叉樹

在二叉樹的基礎上,所有的葉子節點都在最後一層。根節點的左右子樹沒有高度差。

二叉樹的遍歷

遍歷的時候,中序、前序和後序遍歷的時候,是看根節點出現在哪裏來判斷的。根節點第一個出現是前序遍歷。

深度優先和廣度優先

深度優先用棧實現。利用後進先出的特點。

廣度優先用隊列實現,利用先進先出的特點。

堆,分爲最小堆和最大堆。堆的特性是,首先是一個完全二叉樹,然後向樹裏面添加節點的時候,需要調整這個二叉樹,如果新加入的節點比堆父節點小或者大的,就和父節點交換,直到堆頂。

堆可以用數組表示,下標從 1 開始,左右子節點分別爲 2 * i2 * i + 1

堆適合查找一堆數據裏面 top k 大或者小的數據的場景,比如從10億數據裏面找到前 100 大的數,這個時候就可以用最小堆來做,構造一個容量爲 100 的最小堆,然後遍歷 10 億的數據,然後嘗試往堆裏面添加數據,當堆滿了的時候,和堆頂比較,比堆頂小的話,什麼都不做,當比對頂大的話,先查找堆裏面是否已經有了這個數(看要求,如果允許重複的數,那麼就不用查找,如果不允許重複,就需要去重),如果有了就什麼都不做,如果沒有,就替換堆頂,調整堆。

二叉查找樹

某個節點的值比他的左子節點的值大,比他的右子節點的值小。可以簡單記憶爲,父節點大於所有的左子樹的節點,父節點小於所有的右子樹節點。

基於這個特性查找某個數比較方便。

平衡二叉查找樹

當一組數據有序的時候,二叉查找樹會變成一個鏈表,失去了高效查詢的效率。平衡二叉樹規定,根節點的左右子樹的高度差不超過 1 ,超過 1 的時候需要自旋,以保證左右子樹高度差不超過 1.

AVL 樹

AVL 樹是平衡二叉查找樹的一種實現,定義如下

  1. 每個節點的左子樹和右子樹都是 AVL 樹
  2. 左子樹和右子樹的高度差不超過 1

特性

添加刪除節點後都需要從新平衡

紅黑樹

紅黑樹也是平衡二叉查找樹的一種實現。紅黑樹的特性如下

  1. 一個節點,要麼是紅色,要麼是黑色
  2. 根節點爲黑色
  3. 每個葉子節點(沒有子節點的節點)都是黑色

字典樹

後綴樹

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