二叉搜尋樹

2021-10-23 09:43:12 字數 1644 閱讀 1416

二叉搜尋樹是二叉樹的一種特殊形式。 二叉搜尋樹具有以下性質:每個節點中的值必須大於(或等於)其左側子樹中的任何值,但小於(或等於)其右側子樹中的任何值。

二叉搜尋樹(bst)是二叉樹的一種特殊表示形式,它滿足如下特性:

每個節點中的值必須大於(或等於)儲存在其左側子樹中的任何值。

每個節點中的值必須小於(或等於)儲存在其右子樹中的任何值。

像普通的二叉樹一樣,我們可以按照前序、中序和後序來遍歷乙個二叉搜尋樹。 但是值得注意的是,對於二叉搜尋樹,我們可以通過中序遍歷得到乙個遞增的有序序列。因此,中序遍歷是二叉搜尋樹中最常用的遍歷方法。

求解二叉搜尋樹的中序後繼節點(in-order successor)的題目。顯然,你可以通過中序遍歷來找到二叉搜尋樹的中序後繼節點。 你也可以嘗試運用二叉搜尋樹的特性,去尋求更好的解決方案。

乙個高度平衡的二叉搜尋樹(平衡二叉搜尋樹)是在插入和刪除任何節點之後,可以自動保持其高度最小。也就是說,有n個節點的平衡二叉搜尋樹,它的高度是logn。並且,每個節點的兩個子樹的高度不會相差超過1。

乙個有n個節點的平衡二搜尋叉樹的高度總是logn,我們可以計算節點總數和樹的高度,以確定這個二叉搜尋樹是否為高度平衡的。每個節點的兩個子樹的深度不會相差超過1,也可以根據這個性質,遞迴地驗證樹。

二叉樹及其相關操作, 包括搜尋、插入、刪除。 當分析這些操作的時間複雜度時,我們需要注意的是樹的高度是十分重要的考量因素。以搜尋操作為例,如果二叉搜尋樹的高度為h,則時間複雜度為o(h)。二叉搜尋樹的高度的確很重要。

所以,我們來討論一下樹的節點總數n和高度h之間的關係。 對於乙個平衡二叉搜尋樹, 我們已經在前文中提過, 。但對於乙個普通的二叉搜尋樹, 在最壞的情況下, 它可以退化成乙個鏈。

因此,具有n個節點的二叉搜尋樹的高度在logn到n區間變化。也就是說,搜尋操作的時間複雜度可以從logn變化到n。這是乙個巨大的效能差異。所以說,高度平衡的二叉搜尋樹對提高效能起著重要作用。

高度平衡的二叉搜尋樹在實際中被廣泛使用,因為它可以在o(logn)時間複雜度內執行所有搜尋、插入和刪除操作。平衡二叉搜尋樹的概念經常運用在set和map中。 通常情況下,使用高度平衡的二叉搜尋樹將把時間複雜度從 o(n) 改善到 o(logn)。

高度平衡的二叉搜尋樹是二叉搜尋樹的特殊表示形式,旨在提高二叉搜尋樹的效能。

基本操作

leetcode 450.刪除二叉搜尋樹中的節點

leetcode 700.二叉搜尋樹中的搜尋

leetcode 701.二叉搜尋樹中的插入操作

leetcode 96.不同的二叉搜尋樹

leetcode 98.驗證二叉搜尋樹

leetcode 108.將有序陣列轉換為二叉搜尋樹

leetcode 110.平衡二叉樹

leetcode 173.二叉搜尋樹迭代器

leetcode 220. 存在重複元素 iii

leetcode 230.二叉搜尋樹中第k小的元素

leetcode 235. 二叉搜尋樹的最近公共祖先

leetcode 285.二叉搜尋樹中的順序後繼

leetcode 538.把二叉搜尋樹轉換為累加樹

leetcode 703.資料流中的第k大元素

二叉搜尋樹 二叉搜尋樹

題目 二叉搜尋樹 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 解釋 輸入為 ...