1. 程式人生 > 其它 >二叉樹基本概念

二叉樹基本概念

二叉樹

簡單概念:根節點、子樹、葉子節點

父節點、兄弟節點、孩子節點(左孩子、右孩子)

滿二叉樹:一個二叉樹所有【非葉子節點】都存在左孩子和右孩子,且所有葉子節點處於同一層級上。

完全二叉樹:把滿二叉樹右邊幾個(≥0)葉子拿掉,形成的二叉樹就是完全二叉樹。可以看出,滿二叉樹也是完全二叉樹。

如何儲存?

  1. 鏈式儲存結構(連結串列)
  2. 陣列:若父節點下標是p(從0開始),則其左孩子下標是2p+1,右孩子下標是2p+2

二叉樹應用

二叉查詢樹:在二叉樹基礎上增加條件:

  1. 若左子樹不為空,則左子樹節點的值均小於根節點的值;
  2. 若右子樹不為空,則右子樹節點的值均大於根節點的值;
  3. 左子樹、右子樹也是二叉查詢樹

這種查詢方式類似二分法,查詢的時間複雜度 O(logn),常用於排序(也叫二叉排序樹)

二叉樹的遍歷

前序遍歷、中序遍歷、後序遍歷、層序遍歷 (前3種屬於:深度優先遍歷;後1種屬於:廣度優先遍歷)

前序遍歷:根節點->左子樹->右子樹

中序遍歷:左子樹->根節點->右子樹

後序遍歷:左子樹->右子樹->根節點

二叉堆

二叉堆本質上是一種完全二叉樹,其根節點叫”堆頂“

  • 最大堆:任何一個父節點的值,都>=它左孩子或右孩子的值
  • 最小堆:任何一個父節點的值,都<=它左孩子或右孩子的值

二叉堆的自我調整:

  1. 插入節點:從堆的最後一個位置插入,再調整位置
  2. 刪除節點:把堆的最後一個節點調整到被刪除的節點的位置,再調整位置
  3. 構建二叉堆:將無序的完全二叉樹調整為二叉堆,通過”上浮“或”下沉“操作

優先佇列

特點:不遵循FIFO原則,分為以下情況

  1. 最大優先佇列:總是佇列中最大元素優先出隊(通過最大堆實現,每次堆頂出隊)
  2. 最小優先佇列:總是佇列中最小元素優先出隊(最小堆)