二叉查詢樹

2021-06-13 21:13:59 字數 717 閱讀 1562

定義: 

二叉查詢樹是一種二叉樹資料結構,其任意節點的值大於其左子樹所有節點,且小於右子樹所有節點。支援多種動態集合上的操作,主要有查詢、最大值、最小值、前驅、後繼、插入和刪除,這些操作都可以在o(n )時間複雜度內完成,其中n為二叉樹的高度。

操作:查詢:從根節點開始搜尋,若查詢值等於根節點值,則命中,若小於根節點值,則遞迴搜尋左子樹,否則遞迴搜尋右子樹;

最大值:查詢二叉樹最右側的節點;

最小值:查詢二叉樹最左側的節點;

前驅:若查詢節點左子樹不為空,則前驅為左子樹的最大值,若左子樹為空,則前驅為小於查詢節點的最低祖先節點;

後繼:若查詢節點右子樹不為空,則後繼為右子樹的最小值,若右子樹為空,則後繼為大於查詢節點的最低祖先節點;

插入:從根節點開始搜尋,若根節點為空,則插入當前值,若當前值不大於根節點值,則遞迴搜尋左子樹,否則遞迴搜尋右子樹;

刪除:刪除在二叉樹操作比較麻煩,因為刪除節點後會破壞二叉樹,要設法恢復。若刪除節點左子樹右子樹都為空,則直接刪除節點。若刪除節點只有左子樹為空或只有右子樹為空,節點子樹鏈結到節點父節點,然後刪除節點。若刪除節點左子樹右子樹都不為空,則搜尋節點的後繼節點,將後繼節點值移當前節點。

隨機構造的二叉樹期望高度為lg(n),所以期望時間複雜度為o(lg(n)),但理論上最壞時間複雜度可能會達到o(n)。所以實際應用中為了達到穩定的時間複雜度o(lgn),都會構造平衡的二叉樹,可以保證在最壞的情況下,操作的時間複雜度也為o(lg(n))。

二叉樹 二叉查詢樹

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

二叉樹 二叉查詢樹

二叉樹 binary tree 一種樹型結構,每個節點最多擁有兩個節點。如下圖 幾種型別的二叉樹 1.full binary tree 每個節點的孩子數 是 0 或者 2.對高度沒有要求。如下圖 2.perfect binary tree 這個就是最完美的樹,顧名思義,所有葉子節點都有相同的深度,並...

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

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