數據結構——樹——圖解二叉樹

二叉樹簡介

在計算機科學中,二叉樹是每個結點最多有兩個子樹的樹結構。通常子樹被稱作“左子樹”(left subtree)和“右子樹”(right subtree)。二叉樹常被用於實現二叉查找樹和二叉堆。
一棵深度爲k,且有2^k-1個結點的二叉樹,稱爲滿二叉樹。這種樹的特點是每一層上的結點數都是最大結點數。而在一棵二叉樹中,除最後一層外,若其餘層都是滿的,並且或者最後一層是滿的,或者是在右邊缺少連續若干結點,則此二叉樹爲完全二叉樹。具有n個結點的完全二叉樹的深度爲floor(log2n)+1。深度爲k的完全二叉樹,至少有2k-1個葉子結點,至多有2k-1個結點。

二叉樹示例

文章中使用的動畫網站地址: http://www.donghuasuanfa.com

二叉樹

滿二叉樹

完全二叉樹

二叉樹遍歷

樹的前序,中序,後序遍歷,主要是指的\color{red}{根節點}的訪問順序。
前序代表先訪問\color{red}{根節點},再訪問左子樹,最後訪問右子樹。
中序代表先訪問左子樹,再訪問\color{red}{根節點},最後訪問右子樹。
後序代表先訪問左子樹,再訪問右子樹,最後訪問\color{red}{根節點}
二叉樹講解圖例如圖1-1所示:
在這裏插入圖片描述

圖1-1

前序遍歷

前序遍歷步驟

  1. 先訪問根節點
  2. 再訪問左子樹
  3. 最後訪問右子樹

前序遍歷圖解

  步驟一:二叉樹前序遍歷過程爲先訪問根節點,然後再訪問左子樹,最後訪問右子樹。示例圖中節點(6)爲根節點。所以前序遍歷爲先遍歷根節點(6),再遍歷左子樹,最後遍歷右子樹。遍歷過程如下圖所示。
在這裏插入圖片描述

  步驟二:根節點遍歷後,需要遍歷左子樹。將左子樹判定爲一顆獨立的樹。則節點(3)爲左子樹的根節點,所以再次訪問的節點是左子樹的根節點(3)。左子樹遍歷過程如下圖所示。
在這裏插入圖片描述

  步驟三:左子樹的根節點訪問後,需要遍歷左子樹的左子節點(2)。訪問如下圖所示。
在這裏插入圖片描述
  步驟四:左子樹的左子樹訪問後,再訪問左子樹的右子節點,訪問節點爲(4) 。訪問如下圖所示。
在這裏插入圖片描述

  步驟五:右子樹重複上述步驟 。下圖只描述了右子樹的遍歷的第一步,剩下的步驟不再贅述。
在這裏插入圖片描述

前序遍歷動畫步驟

在這裏插入圖片描述

中序遍歷

中序遍歷步驟

  1. 先訪問左子樹
  2. 再訪問根節點
  3. 最後訪問右子樹

中序遍歷圖解

  步驟一:二叉樹中序遍歷過程爲先訪問左子樹,然後再訪問根節點,最後訪問右子樹。示例圖中最先訪問左子樹(3,2,4),將左子樹視爲獨立的樹,則左子樹包含左子樹的根節點(3),左子樹的左節點(2),左子樹的右節點(4)。所以左子樹的中序遍歷過程,優先遍歷左子樹的左子樹節點(2)。
在這裏插入圖片描述
  步驟二:左子樹的左子樹節點(2)訪問過後,再訪問左子樹的根節點(3)。訪問過程如下圖所示:
在這裏插入圖片描述
  步驟三:左子樹的根節點(3)訪問過後,最後訪問左子樹的右子樹節點(4)。訪問過程如下圖所示:
在這裏插入圖片描述
  步驟四:左子樹遍歷後,訪問整體樹的根節點(6)。訪問過程如下圖所示:
在這裏插入圖片描述
  步驟五:右子樹重複上述步驟 。下圖只描述了右子樹的遍歷的第一步,剩下的步驟不再贅述。
在這裏插入圖片描述

中序遍歷動畫步驟

在這裏插入圖片描述

後序遍歷

後序遍歷步驟

  1. 先訪問左子樹
  2. 再訪問右子樹
  3. 最後訪問根節點

後序遍歷圖解

  步驟一:二叉樹後序遍歷過程爲先訪問左子樹,然後再訪問右子樹,最後訪問根節點。示例圖中最先訪問左子樹(3,2,4),將左子樹視爲獨立的樹,則左子樹包含左子樹的根節點(3),左子樹的左節點(2),左子樹的右節點(4)。所以左子樹的後序遍歷過程,優先遍歷左子樹的左子樹節點(2)。
在這裏插入圖片描述
  步驟二:左子樹的左子樹節點(2)訪問過後,再訪問左子樹的右子節點(4)。訪問過程如下圖所示:
在這裏插入圖片描述
  步驟三:左子樹的右子樹節點(4)訪問過後,再訪問左子樹的根節點(3)。訪問過程如下圖所示:
在這裏插入圖片描述
  步驟四:整體的樹當左子樹(3,2,4)訪問後,再訪問右子樹,最後訪問根節點(6)。
      右子樹的後序遍歷過程同樣是先右子樹的左子樹,右子樹的右子樹,最後右子樹的根節點。所以右子樹的優先遍歷右子樹的左子樹(7,6)。
      遍歷樹(7,6)同樣按照規則。先遍歷左子樹(6)。所以第四步驟遍歷的節點爲(6)。
訪問過程如下圖所示:
在這裏插入圖片描述

  步驟五:右子樹重複遍歷規則 。後序遍歷右子樹的左子樹(7,6),由於子樹(7,6)沒有右子樹節點,所以訪問子樹(7,6)的根節點(7)。下圖只描述了右子樹的左子樹遍歷下一步,剩下的步驟不再贅述。訪問過程如下圖所示:
在這裏插入圖片描述

後序遍歷動畫步驟

在這裏插入圖片描述

二叉樹操作

二叉樹查找節點

二叉樹查找步驟

1.從根節點開始比較。如果查找的幾點小於節點,則繼續在左子樹中查找。如果查找的節點大於節點。則在右子樹中查找。
2.如果節點值與查找的值相同。則返回該節點。

二叉樹查找圖解

  步驟一:輸入查找節點,查找的節點的值爲4。
在這裏插入圖片描述

  步驟二:從根節點開始遍歷,查找的節點4小於根節點,則在左子樹中繼續查找。
在這裏插入圖片描述
  步驟三:遞歸遍歷子樹節點。下一步需要比較節點3和查找節點4.查找節點4大於節點3,則繼續遞歸上述步驟,下圖只描述了下一步驟,剩下的步驟不再贅述。
在這裏插入圖片描述

二叉樹查找動畫步驟

在這裏插入圖片描述

二叉樹插入節點

二叉樹插入步驟

1.先執行查找操作,查詢到插入節點的位置。
2.比較插入節點和樹中的節點大小。如果插入節點小於樹中結點,則將節點插入到樹中結點的左節點。如果插入節點大於樹中結點,則將節點插入到樹中結點的右節點。

二叉樹插入圖解

  步驟一:輸入插入節點,插入節點的值爲5。
在這裏插入圖片描述
  步驟二:執行查找邏輯,查詢插入節點5的插入位置。
在這裏插入圖片描述
  步驟三:比較插入節點5和插入節點的值(4),因爲5大於4.所以將插入節點插入到節點(4)的右節點。
在這裏插入圖片描述

二叉樹插入動畫步驟

在這裏插入圖片描述

二叉樹刪除節點

二叉樹刪除分爲三個場景。
場景A:刪除節點下無子節點。
場景B:刪除節點下只有一個子節點。
場景C:刪除節點下有倆個子節點。

場景A:刪除節點下無子節點

此場景比較簡單,所以只描述步驟和演示動畫。

場景A步驟

1.查找到刪除節點。
2.刪除此節點。

場景A動畫

在這裏插入圖片描述

場景B:刪除節點下只有一個子節點

此場景比較簡單,所以只描述步驟和演示動畫。

場景B步驟

1.查找到刪除節點。
2.刪除此節點。
3.將刪除節點的子節點替換到刪除節點。

場景B動畫

在這裏插入圖片描述

場景C:刪除節點下有倆個子節點

場景C步驟

1.查找到刪除節點。
2.查找到刪除節點的後繼結點。
3.刪除節點。
4.將後繼節點替換到刪除節點位置。

場景C圖解

  步驟一:查找到刪除節點的位置,示例爲刪除節點8,則先查詢要刪除的節點位置8。
在這裏插入圖片描述
  步驟二:將節點8從樹中刪除。
在這裏插入圖片描述
  步驟三:查找到刪除節點的後繼節點。
  後繼節點,將樹中的所有節點映射到一條線上。刪除節點的下一個節點爲後繼節點。

在這裏插入圖片描述
示例中的刪除節點的後繼節點爲 9
在這裏插入圖片描述
  步驟四:將後繼節點(9)替換到刪除節點(8)位置,刪除結束。
在這裏插入圖片描述

場景C動畫

在這裏插入圖片描述

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