二叉搜索树简介和部分题目
引言
二叉搜索樹是一個有序樹,遵循以下規則:
若它的左子樹不空,則左子樹上所有結點的值均小于它的根結點的值;
若它的右子樹不空,則右子樹上所有結點的值均大于它的根結點的值;
它的左、右子樹也分別為二叉排序樹
二叉搜索樹如圖:
ps:其實這些學習都是建立在二叉樹的基礎上,強烈建議學好二叉樹,因為二叉樹是當下運用比較廣泛的一種數據結構,而且在二叉樹的學習中不僅可以加強棧和隊列的知識,還可以學會深搜和廣搜,同樣為圖的學習打下非常好的基礎,因為樹就可以看成一個圖;
對于二叉搜索樹,如果你做過比較多的二叉樹的題目,就會發現二叉搜索樹是經常出現的;對二叉搜索樹的學習一定要建立在熟練掌握二叉樹的前提上,而二叉搜索樹學好了就有利于對平衡二叉搜索樹(AVL樹) 的學習, 而平衡二叉搜索樹學好了就利于對紅黑樹(RBTree) 的學習,紅黑樹可以進行高效的查找,而且應用特別廣泛,所以理解二叉搜索樹是十分重要的;
重點
二叉搜索樹的優點是,即便在最壞的情況下,也允許在O(n)的時間復雜度內執行所有的搜索、插入、刪除操作。
如果你想有序地存儲數據或者需要同時執行搜索、插入、刪除等多步操作,二叉搜索樹這個數據結構是一個很好的選擇。
在做了很多二叉搜索樹的題目后,就兩點需要注意:
1,二叉搜索樹其是有順序的,可以通過中序遍歷得到一個有序遞增的序列;
2,做二叉搜索樹的相關題目一定要掌握一種方法,就是通過當前節點 curNode 和 前一個節點 preNode 之間的關系解決問題;
初始化的時候 preNode = NULL,這樣當 preNode 為 NULL 時候,我們就知道這是比較的第一個元素。
題目
這里列出幾道二叉搜索樹的題目,可以試試;
- 700.二叉搜索樹中的搜索
- 98.驗證二叉搜索樹 //需要perNode
- 530.二叉搜索樹的最小絕對差 //需要perNode
- 501.二叉搜索樹中的眾數 //需要perNode
- 538.把二叉搜索樹轉換為累加樹
- 235.二叉搜索樹的最近公共祖先
- 701.二叉搜索樹中的插入操作
- 450.刪除二叉搜索樹中的節點 // 注:題解在這
- 669 修剪二叉搜索樹
- 108.將有序數組轉換為二叉搜索樹
這幾道題目具有代表性可以試試;
總結
以上是生活随笔為你收集整理的二叉搜索树简介和部分题目的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++中的 c_str() 函数
- 下一篇: 450. 删除二叉搜索树中的节点