二叉搜索樹,二叉搜索平衡樹(AVL樹,紅黑樹)

      如果你在讀一本書時,發現其中對經典理論的解釋很難理解,很可能說明這本書差,因爲經典的東西總是可以清晰地被表述。

                                                                                                                       ------  by 上海交大一位計算方法老師


近來學習二叉搜索的知識,發現有些經典的書籍解釋的非常好,非常透徹,遠比網上博客的解釋好百倍,請參閱下文提到的Ref。

 

樹:

Tree在計算機科學裏是一個萬分基礎的數據結構。幾乎所有的操作系統都將文件存放到樹狀結構;幾乎所有的編譯器都需要實現一個表達式樹;文件壓縮所用的哈夫曼算法需要用到樹狀結構;數據庫所使用的B-tree則是一種相當複雜的樹狀結構。

二叉搜索樹:

所謂二叉樹(binary tree),其意義是: 任何節點做多允許有兩個子節點。這兩個子節點稱爲左子節點和右子節點。如果用遞歸的方式來定義二叉樹,我們可以說,“一個二叉樹如果不爲空,便是由一個根節點和左右兩棵子樹構成,左右子樹都可能爲空”。二叉樹的應用相當廣泛,編譯器表達式樹和哈夫曼編碼樹都是二叉樹。

所謂二叉搜索樹(binary search tree),可提供對數事件的元素插入和訪問。二叉樹的節點的放置規則是: 任何節點的鍵值一定大於其左子樹中的每一個節點的鍵值,並小於其右子樹中的每一個節點的鍵值。因此,從根節點一直往左走,直到無左路可走,即得最小元素; 從根節點一直往右走,直至無右路可走則得到最大節點。

 

如上所述,要在一棵二叉搜索樹中找出最大或最小元素是一件非常簡單得事情,比較麻煩得是元素得插入和刪除。

插入新元素時,可從根節點開始,遇到鍵值較大的就向左,遇到鍵值較小的就向右,一直到尾端,即爲插入點。

圖1所示爲二叉搜索樹的元素移除操作圖解,欲刪除節點A,情況可以分爲兩種:如果A只有一個子節點,我們就將A的子節點連接至A的父節點,並刪除A;  如果A有兩個子節點,我們就以右子樹內的最小節點取代A。 注意,右子樹的最小節點極易獲得,從右子節點開始(視爲右子樹的根節點),一直向左走到底即是。

借記卡
圖1-a

 

圖1-b

 

平衡二叉搜索樹:

 


Ref:

《STL源碼剖析》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章