二叉樹基本概念
阿新 • • 發佈:2022-03-17
二叉樹
簡單概念:根節點、子樹、葉子節點
父節點、兄弟節點、孩子節點(左孩子、右孩子)
滿二叉樹:一個二叉樹所有【非葉子節點】都存在左孩子和右孩子,且所有葉子節點處於同一層級上。
完全二叉樹:把滿二叉樹右邊幾個(≥0)葉子拿掉,形成的二叉樹就是完全二叉樹。可以看出,滿二叉樹也是完全二叉樹。
如何儲存?
- 鏈式儲存結構(連結串列)
- 陣列:若父節點下標是p(從0開始),則其左孩子下標是2p+1,右孩子下標是2p+2
二叉樹應用
二叉查詢樹:在二叉樹基礎上增加條件:
- 若左子樹不為空,則左子樹節點的值均小於根節點的值;
- 若右子樹不為空,則右子樹節點的值均大於根節點的值;
- 左子樹、右子樹也是二叉查詢樹
這種查詢方式類似二分法,查詢的時間複雜度 O(logn)
,常用於排序(也叫二叉排序樹)
二叉樹的遍歷
前序遍歷、中序遍歷、後序遍歷、層序遍歷 (前3種屬於:深度優先遍歷;後1種屬於:廣度優先遍歷)
前序遍歷:根節點->左子樹->右子樹
中序遍歷:左子樹->根節點->右子樹
後序遍歷:左子樹->右子樹->根節點
二叉堆
二叉堆本質上是一種完全二叉樹,其根節點叫”堆頂“
- 最大堆:任何一個父節點的值,都>=它左孩子或右孩子的值
- 最小堆:任何一個父節點的值,都<=它左孩子或右孩子的值
二叉堆的自我調整:
- 插入節點:從堆的最後一個位置插入,再調整位置
- 刪除節點:把堆的最後一個節點調整到被刪除的節點的位置,再調整位置
- 構建二叉堆:將無序的完全二叉樹調整為二叉堆,通過”上浮“或”下沉“操作
優先佇列
特點:不遵循FIFO原則,分為以下情況
- 最大優先佇列:總是佇列中最大元素優先出隊(通過最大堆實現,每次堆頂出隊)
- 最小優先佇列:總是佇列中最小元素優先出隊(最小堆)