二叉樹 二叉查詢樹

2021-07-23 19:03:48 字數 1403 閱讀 5355

二叉樹 ( 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. 結束。

有問題歡迎指出

二叉樹 二叉查詢樹

構建二叉樹,判斷是否為二叉查詢樹,遞迴先序遍歷,非遞迴中序遍歷 include include include include using namespace std 二叉樹結點 struct treenode 鍊錶結點 struct listnode struct tempnodetempnode...

樹(樹,二叉樹,二叉查詢樹)

1.定義 n n 0 個結點構成的有限集合。當n 0時,稱為空樹 2.對於任一棵非空樹 n 0 它具備以下性質 1 樹中有乙個稱為 根 root 的特殊結點,用 r 表示 2 其餘結點可分為m m 0 個互不相交的有限集t1,t2,其中每個集合本身又是一棵樹,稱為原來樹的子樹。3.樹的一些性質 1 ...

排序二叉樹or搜尋二叉樹or查詢二叉樹

排序二叉樹,搜尋二叉樹,查詢二叉樹都是乙個意思,只是叫法不同而已。下面的文章中我們統稱為排序二叉樹。本文主要是針對高中資訊學,因此其中不涉及到指標,所有需要用指標的地方都直接使用陣列進行模擬。排序二叉樹定義 1 若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值 2 若右子樹不空,則右子...