二叉樹 & 二叉查詢樹
二叉樹 ( Binary Tree ) : 一種樹型結構,每個節點最多擁有兩個節點。( 如下圖 )
幾種型別的二叉樹
1. full binary tree: 每個節點的孩子數 是 0 或者 2. 對高度沒有要求。 如下圖
2. perfect binary tree: 這個就是最完美的樹,顧名思義,所有葉子節點都有相同的深度,並且除了葉子節點剩下的所有節點都有兩個孩子節點。
3. complete binary tree: 除了最後的那一層,其他層必須被填滿,並且對於最後一層必須從最左開始填滿。
二叉查詢樹:
1. 所有的字數都必須滿足, 左節點的值小於根節點,根節點小於右節點.
2. 空間複雜度為O(n)
3. 搜尋/插入/刪除 的時間複雜度: 最優 O(log n) 最差 O (n)
為什麼是log? 因為當比較的時候,我們能通過每次的比較過濾掉一半的樹結構。
對於二叉查詢樹:
查詢/插入都很淺顯易懂。
對麻煩的是刪除節點。
二叉查詢樹的刪除節點:
1. 刪除一個沒有子節點的節點 - 直接移除該節點
2. 刪除一個有一個子節點的節點 - 直接移除該節點,並且將它的子節點置換到被刪除的節點的位置上
3. 刪除一個有兩個子節點的節點 - 定義 將要被刪除的節點為N, 定義 另一個節點 為 R, R節點 是 來自 該樹 in-order 序列的N節點之前的那一個節點。然後將R的值賦值給N,
如果R不滿足 以上的條件1 或者 2那麼,將R作為N, 進行遞迴.
比如: in-oder 序列 1, 3, 4, 6, 7, 8, 10, 13, 14. 我們想要刪除10, 那麼10 為N, R為8.
例子: 在以上的樹結構中,刪除節點 10.
1. 根據 in-order 找到R為8, N為10, 將N的值賦值為 8。
2. 因為此時的R不滿足1 或者 2 條件,所以繼續。
3. 將 R 變成N, 並找到新的R 7.
4. 7 滿足條件 1 或者 2。
5. 結束。
有問題歡迎指出
相關文章
- 手擼二叉樹——二叉查詢樹二叉樹
- 二叉查詢樹
- 滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹(二叉查詢樹)和最優二叉樹二叉樹
- 平衡二叉查詢樹:紅黑樹
- 二叉查詢樹【二叉排序樹】構建和查詢演算法 PHP 版排序演算法PHP
- 5分鐘瞭解二叉樹之二叉查詢樹二叉樹
- 二叉查詢樹和笛卡爾樹
- 二叉樹路徑查詢二叉樹
- Amazing tree —— 二叉查詢樹
- 二叉查詢樹的插入刪除查詢
- 二叉查詢樹概念及實現
- 二叉查詢樹(查詢、插入、刪除)——C語言C語言
- JavaScript實現簡單二叉查詢樹JavaScript
- Python 樹表查詢_千樹萬樹梨花開,忽如一夜春風來(二叉排序樹、平衡二叉樹)Python排序二叉樹
- 第 34 題:如何實現二叉查詢樹?
- 排序二叉樹和平衡二叉樹排序二叉樹
- 二叉樹(順序儲存二叉樹,線索化二叉樹)二叉樹
- 二叉樹 & 二叉查詢樹 ADT [資料結構與演算法分析 c 語言描述]二叉樹資料結構演算法
- 二叉樹 & 二叉查詢樹 ADT【資料結構與演算法分析 c 語言描述】二叉樹資料結構演算法
- 手擼二叉樹——AVL平衡二叉樹二叉樹
- 資料結構之樹結構概述(含滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹、紅黑樹、B-樹、B+樹、B*樹)資料結構二叉樹
- 【Algorithm&DataStructure】二叉查詢樹(BST)的遍歷GoASTStruct
- 二叉樹二叉樹
- 【LeetCode-二叉樹】二叉樹前序遍歷LeetCode二叉樹
- 判斷二叉樹是否為滿二叉樹二叉樹
- 資料結構中的樹(二叉樹、二叉搜尋樹、AVL樹)資料結構二叉樹
- [譯] GopherCon 2018:揭祕二叉查詢樹演算法Go演算法
- 使用JS去實現一個BST(二叉查詢樹)JS
- 資料結構與演算法-二叉查詢樹資料結構演算法
- 最優二叉查詢樹—動態規劃C++動態規劃C++
- 自己動手作圖深入理解二叉樹、滿二叉樹及完全二叉樹二叉樹
- 二叉樹、B樹以及B+樹二叉樹
- 平衡二叉樹,B樹,B+樹二叉樹
- 平衡二叉樹(AVL樹)和 二叉排序樹轉化為平衡二叉樹 及C語言實現二叉樹排序C語言
- 相同二叉樹和鏡面二叉樹問題二叉樹
- 深入學習二叉樹 (一) 二叉樹基礎二叉樹
- 樹和二叉樹簡介二叉樹
- Chapter 3 樹與二叉樹APT二叉樹
- n叉樹vs二叉樹二叉樹