二叉搜尋樹

2022-05-22 20:33:11 字數 1282 閱讀 8404

二叉搜尋樹定義

二叉搜尋樹,又稱為二叉排序樹。binary search tree,binary sort tree,簡寫為bst。二叉排序樹或為空樹;或者是這樣一棵二叉樹,若左子樹不空,則左子樹上所有結點均小於根結點,若右子樹不空,則右子樹上所有結點均大於根結點,其左、右子樹也是二叉排序樹。

時間複雜度

二叉搜尋樹插入、刪除、和搜尋的時間是o(log(n))。

中序遍歷bst可以得到乙個關鍵字的有序序列,所以按排序順序列印出所有節點時間複雜度為o(n)。如果中序遍歷二叉排序樹,將得到有序的關鍵字序列,這也是手工判別二叉排序樹的方法之一。給定乙個數,可以在o(log(n)) 時間內找出大小僅次於它的節點(方法為記住當前遍歷過的最小差值和對應節點號,直至null)。

特性

在構建bst的過程中,新插入的結點一定是乙個新新增的葉子節點,並且是查詢不成功時查詢路徑上訪問的最後乙個節點的做孩子或者右孩子。構建二叉樹的過程,就是對乙個無序序列進行排序的過程。

查詢演算法

插入演算法

刪除演算法如下圖所示,刪除節點p時,如果p左右子樹都非空,可以有兩種方法將樹重新調整為bst:

一,讓以左孩子c為根的子樹替代p的位置,將右孩子為根的子樹pr重新連線到p的直接前驅節點s,作為s的右子樹(得到圖c)。

二,讓p的直接前驅節點s替換p,s的左子樹連線到s的父節點作為右子樹(得到圖d)。

刪除演算法如下,

二叉搜尋樹 二叉搜尋樹

題目 二叉搜尋樹 time limit 2000 1000 ms j a others memory limit 32768 32768 k j a others total submission s 6945 accepted submission s 3077 problem descripti...

二叉搜尋樹 修剪二叉搜尋樹

第一反應是重構,看來別人的解答發現,其實不用重構那麼複雜。treenode trimbst treenode root,int low,int high if root val high 下一層處理完左子樹的結果賦給root left,處理完右子樹的結果賦給root right。root left ...

樹 二叉樹 二叉搜尋樹

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 13輸出 true 示例 2 輸入 5 14 3 6輸出 false 解釋 輸入為 ...