數(shù)據(jù)結構篇四:Binary Trees and Binary Search Trees (BST)

這是一位 google 工程師分享的8小時的數(shù)據(jù)結構的視頻,我的筆記


Tree: 滿足以下定義的undirected graph(無向圖)

  • An acyclic(非循環(huán)的) connected graph
  • N nodes and N-1 edges
  • 有且只有一條路徑連接任意兩個頂點

任意一個節(jié)點都可以被理解為root

Binary Tree
擁有最多兩個節(jié)點的Tree

Binary Search Tree
服從以下特性的binary tree

  • 左子樹的元素小于右子樹

擁有重復元素是允許的,但多數(shù)情況下我們只研究不重復的元素

這是一個有效的BST嗎?

![
2021-11-29-17-30-45.png

是的(對于單鏈下來的鹿霸,幾乎會直接就滿足右邊比左邊大)

Usage

  • BSTs
    • implementation of some map and set ADTs
    • red black trees
    • AVL trees
    • splay trees
    • ...
  • binary heaps
  • syntax trees (by compiler and calculators)
  • Treap - a probabilistic DS (uses a randomized BST)

Complexity
增刪查平均為O(log n)秽梅,但最差情況下都為O(n)频蛔,即線性時間

Adding elements to a BST

  • 第一個為root
  • 每一個新數(shù)琴庵,比頂點大,放右邊蛤织,比頂點小艺挪,放左邊不翩,順序下行
    • 不是從左到右擺滿再做subtree
    • 比如3,6,9, 會得一棵全部數(shù)字擺在右邊的數(shù),而不是頂3左6右9的三角形
    • 這也是為什么極端情況下,時間復雜度是O(n)口蝠,因為就是一條線到底
    • 這也是balanced binary search trees被引入的原因

Removing elements from a BST

  • find
    • 從root開始器钟,小的走左右,大的走右邊
  • replace (to maintain the BST invariant)

找繼任者的時候妙蔗,如果刪除元素沒有子節(jié)點傲霸,只有左或右子節(jié)點,都很好辦眉反,但如果它有兩個子節(jié)點昙啄,那么應該用哪個來接續(xù)呢?

原則仍然是要服從左邊的比右邊的小寸五,所以你其實有兩種選擇:

  • 把左邊最大的數(shù)選出來 或
  • 把右邊最小的數(shù)選出來
    因為它們的“來源”梳凛,肯定是能保證bst invariant的
    • 這個數(shù)是要替換這個節(jié)點的,所以要比這個節(jié)點左邊的數(shù)都大梳杏,及比右邊所有的數(shù)都小伶跷,顯然就是左邊的最大數(shù),或右邊的最小數(shù)了秘狞。
    • 只是把找到的元素復制過去后,多了的那個怎么辦呢蹈集?
  • 遞歸
    新找到的元素當然要從原來的位置刪除烁试,這時又根據(jù)它是否葉節(jié)點,單子節(jié)點還是全節(jié)點拢肆,來反復進行前面的操作减响,最終總是可以退出的


    2021-11-29-17-30-45.png
2021-11-29-17-31-11.png

Tree Traversals

(Preorder, Inorder, Postorder & Level order)


2021-11-29-17-38-42.png
  • preorder,在遍歷左側元素的時候郭怪,每次已經先取到元素了(最頂層)
  • inorder里支示,遍歷元素的時候,直到所有的left走完了鄙才,才取到第一個元素(最底層的)
  • postorder里颂鸿,也是遍歷到最底層,但是下一步就是取兄弟節(jié)點了


    2021-11-29-17-45-31.png

inorder一個重要特征:它是從小到大排好序的攒庵!


2021-11-29-17-52-57.png

preorder 和 postorder沒什么特征嘴纺,舉一個post的例子觀察下

而levelorder則是一一層地取的:

2021-11-29-17-54-34.png

這就是廣度優(yōu)先了(Breadth First Searth)BFS

實現(xiàn)BFS

  1. 每處理一個parent的時候,把parent加到結果數(shù)組里
  2. parent的子節(jié)點加到隊列里
  3. 每次從隊列里取出一個值加到結果數(shù)組里(步驟1)
  4. 該值的child加到隊列里(步驟2)

其實就是步驟1浓冒,2的重復栽渴,比如:


2021-11-29-18-04-16.png
[11], [6, 15] 處理第1個數(shù)11, 隊列里多了兩個元素6稳懒, 15
[11, 6], [15, 3, 8] 從隊列里取出6闲擦, 加入結果,它的子元素(3, 8)加入隊列
[11, 6, 15], [3, 8, 13, 17]
[11, 6, 15, 3], [8, 13, 17, 1, 5]
[11, 6, 15, 3, 8], [13, 17, 1, 5] 這一步,8沒有子節(jié)點了墅冷,隊列變短了
[11, 6, 15, 3, 8, 13], [17, 1, 5, 12, 14]
[11, 6, 15, 3, 8, 13, 17], [1, 5, 12, 14, 19] 17只有一個child
[11, 6, 15, 3, 8, 13, 17, 1, 5, 12, 14, 19] 剩下的都沒child了纯路,全部拼進去
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市俺榆,隨后出現(xiàn)的幾起案子感昼,更是在濱河造成了極大的恐慌,老刑警劉巖罐脊,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異萍桌,居然都是意外死亡宵溅,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門上炎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恃逻,“玉大人,你說我怎么就攤上這事藕施】芩穑” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵裳食,是天一觀的道長矛市。 經常有香客問我,道長诲祸,這世上最難降的妖魔是什么浊吏? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮救氯,結果婚禮上找田,老公的妹妹穿的比我還像新娘。我一直安慰自己着憨,他們只是感情好墩衙,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著甲抖,像睡著了一般底桂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上惧眠,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天籽懦,我揣著相機與錄音,去河邊找鬼氛魁。 笑死暮顺,一個胖子當著我的面吹牛厅篓,可吹牛的內容都是我干的。 我是一名探鬼主播捶码,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼羽氮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了惫恼?” 一聲冷哼從身側響起档押,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎祈纯,沒想到半個月后令宿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡腕窥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年粒没,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片簇爆。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡癞松,死狀恐怖,靈堂內的尸體忽然破棺而出入蛆,到底是詐尸還是另有隱情响蓉,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布哨毁,位于F島的核電站厕妖,受9級特大地震影響,放射性物質發(fā)生泄漏挑庶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一软能、第九天 我趴在偏房一處隱蔽的房頂上張望迎捺。 院中可真熱鬧,春花似錦查排、人聲如沸凳枝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽岖瑰。三九已至,卻和暖如春砂代,著一層夾襖步出監(jiān)牢的瞬間蹋订,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工刻伊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留露戒,地道東北人椒功。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像智什,于是被迫代替她去往敵國和親动漾。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內容