動畫 | 什么是二分搜索樹(二叉查找樹)严望?

二分搜索樹屬性

file

二分搜索樹的又名比較多多艇,有的叫二叉排序樹,也有的叫二叉查找樹像吻,或者有序二叉查找樹峻黍。是指一棵空樹或者具有下列性質(zhì)的二叉樹:

1.若任意節(jié)點的左子樹不空,則左子樹所有節(jié)點的值均小于它根節(jié)點的值拨匆;

2.若任意節(jié)點的右子樹不空姆涩,則右子樹所有節(jié)點的值均小于它根節(jié)點的值;

3.任意節(jié)點的左惭每、右子樹也分別為二叉查找樹骨饿;

4.沒有鍵值相等的節(jié)點。

它的查找台腥、插入和刪除的時間復(fù)雜度都等于樹高宏赘,期望值是O(logn),最壞時間復(fù)雜度是O(n)览爵,比如樹退化成線性表置鼻。

(響應(yīng)讀者的建議镇饮,視頻動畫不放BGM了)

動畫

算法動畫視頻 地址

查找元素

二分搜索樹是為了實現(xiàn)快速查找而生的蜓竹,也支持快速添加和刪除一個數(shù)據(jù)。如何查找某個元素首先跟根節(jié)點去做比較,如果相等的話就返回俱济;如果待查元素要比根節(jié)點小嘶是,就進行左子樹遞歸查找;如果待查元素要比根節(jié)點大蛛碌,就進行右子樹的遞歸查找聂喇;如果查找到最后還沒有一個符合的元素,就返回null蔚携。

遞歸查找

遞歸查找的方式有很多希太,有層序遍歷、前序遍歷酝蜒、中序遍歷和后序遍歷誊辉。我這里就舉后面三個遍歷方式。

Code

如果代碼是下面這樣寫的亡脑,那它遍歷過程是怎么樣的堕澄?看下面視頻動畫。

file
視頻動畫:前序遍歷

算法動畫視頻 地址

視頻動畫:前中后遍歷

算法動畫視頻 地址

視頻動畫:前中后遍歷 前序

算法動畫視頻 地址

視頻動畫:前中后遍歷 中序

算法動畫視頻 地址

經(jīng)過中序遍歷得到的正好是一個升序序列霉咨。

視頻動畫:前中后遍歷 后序

算法動畫視頻 地址

如果不考慮升序蛙紫,后序遍歷能夠為二分搜索樹早點釋放內(nèi)存。

添加元素

對于二叉樹的添加和刪除元素途戒,使用鏈表存儲形式比較好操作的坑傅,如果使用數(shù)組形式存儲,刪除某一個有子樹的元素會引發(fā)一系列的位置改變棺滞,涉及到交換元素的位置裁蚁,性能也比鏈表的小。所以待會后面出現(xiàn)的偽代碼都以鏈表存儲形式去操作继准。

視頻動畫:添加元素

算法動畫視頻 地址

Code
file

刪除元素:刪除最小和最大的元素

刪除最小和最大的元素很簡單枉证,如果是刪除最小的元素,從二叉樹的頂點出發(fā)移必,一直遞歸它的左孩子室谚,直到某節(jié)點的左孩子為空,這時候這個節(jié)點就是最小的元素崔泵。刪除最大的元素也是一樣的秒赤,一直遞歸它的右孩子,直到某節(jié)點的右孩子為空憎瘸。

視頻動畫:刪除最小和最大的元素

算法動畫視頻 地址

刪除任意元素

如果刪除任意元素入篮,而這元素正好有左右子樹的,那該是怎么般呢幌甘?

1962年潮售,Hibbard提出了Hibbard Deletion的解決方法痊项。

看到Hibbard名字就想起來,我在希爾排序介紹過Hibbard增量序列酥诽,也把它相應(yīng)的公式通過代碼體現(xiàn)出來鞍泉,代替希爾增量序列去進行希爾排序,最壞時間復(fù)雜度也比希爾增量序列的要小肮帐。

回到刪除有左右子樹的元素咖驮,想想它的左右子樹也屬于二叉排序樹(也是二分搜索樹),它左子樹的最大值比它小训枢,它右子樹的最小值比它大托修。所以不管選擇左子樹的最大值還是選擇右子樹的最小值,替換掉要刪除的元素恒界,整個二叉樹都是符合二分搜索樹的規(guī)則诀黍。

視頻動畫:刪除任意元素

算法動畫視頻 地址

Code
file

支持重復(fù)元素的二分搜索樹

二分搜索樹有一個規(guī)則是:沒有鍵值相等的節(jié)點。那么就不建議把待添加的元素跳過值相等的節(jié)點仗处,到下一步繼續(xù)比較直到插入新的節(jié)點眯勾。比如我想插入23,插完之后上有23婆誓,下有23吃环,那查找就沒有意義了,也破壞了時間復(fù)雜度上的O(logn)洋幻。

建議就是在節(jié)點上加一個屬性:count郁轻。當(dāng)插入23的時候,count就可以自算++文留。這不僅滿足了沒有鍵值相等的規(guī)則好唯,也滿足時間復(fù)雜度的期望值。

file
Code
file

喜歡本文的朋友燥翅,微信搜索「算法無遺策」公眾號骑篙,收看更多精彩的算法動畫文章

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市森书,隨后出現(xiàn)的幾起案子靶端,更是在濱河造成了極大的恐慌,老刑警劉巖凛膏,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件杨名,死亡現(xiàn)場離奇詭異,居然都是意外死亡猖毫,警方通過查閱死者的電腦和手機台谍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吁断,“玉大人趁蕊,你說我怎么就攤上這事镊折。” “怎么了介衔?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長骂因。 經(jīng)常有香客問我炎咖,道長,這世上最難降的妖魔是什么寒波? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任乘盼,我火速辦了婚禮,結(jié)果婚禮上俄烁,老公的妹妹穿的比我還像新娘绸栅。我一直安慰自己,他們只是感情好页屠,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布粹胯。 她就那樣靜靜地躺著,像睡著了一般辰企。 火紅的嫁衣襯著肌膚如雪风纠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天牢贸,我揣著相機與錄音竹观,去河邊找鬼。 笑死潜索,一個胖子當(dāng)著我的面吹牛臭增,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播竹习,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼誊抛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了整陌?” 一聲冷哼從身側(cè)響起芍锚,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蔓榄,沒想到半個月后并炮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡甥郑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年逃魄,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片澜搅。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡伍俘,死狀恐怖邪锌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情癌瘾,我是刑警寧澤觅丰,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站妨退,受9級特大地震影響妇萄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜咬荷,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一冠句、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧幸乒,春花似錦懦底、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至腔召,卻和暖如春拱层,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宴咧。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工根灯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人掺栅。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓烙肺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親氧卧。 傳聞我的和親對象是個殘疾皇子桃笙,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容