2019-06-02

?二叉樹和紅黑二叉樹


二叉樹的定義

二叉樹是樹形結(jié)構(gòu)的一個重要類型凉夯。 許多實際問題抽象出來的數(shù)據(jù)結(jié)構(gòu)往往是二叉樹的形式性雄,即使是一般的樹也能簡單地轉(zhuǎn)換為二叉樹疹娶,而且二叉樹的存儲結(jié)構(gòu)及其算法都較為簡單负蚊,因此二叉樹顯得特別重要。

二叉速樹的特點:

1)樹是由一個集合以及在該集合上定義的一種關(guān)系構(gòu)成的鞋仍。

集合中的元素稱為樹的結(jié)點,所定義的關(guān)系稱為父子關(guān)系搅吁。

2) 父子關(guān)系在樹的結(jié)點之間建立了一個層次結(jié)構(gòu)威创。

3) 樹的結(jié)點包含一個數(shù)據(jù)元素及若干指向其子樹的若干分

支。

4) 在這種層次結(jié)構(gòu)中有一個結(jié)點具有特殊的地位谎懦,這個結(jié)點

稱為該樹的根結(jié)點肚豺,或簡稱為樹根。

平衡二叉樹

在平衡二叉樹中任何節(jié)點的兩個子樹的高度最大差別為1界拦,所以它也被稱為高度平衡樹吸申。 增加和刪除節(jié)點可能需要通過一次或多次樹旋轉(zhuǎn)來重新平衡這個樹。


?平衡二叉樹示意圖

?紅黑二叉樹

紅黑二叉樹(簡稱:紅黑樹)享甸,它首先是一棵二叉樹截碴,同時也是一棵自平衡的排序二叉樹。

? ? ??紅黑樹在原有的排序二叉樹增加了如下幾個要求:

? ? ??1. 每個節(jié)點要么是紅色蛉威,要么是黑色日丹。

? ? ??2. 根節(jié)點永遠(yuǎn)是黑色的。

? ? ??3. 所有的葉節(jié)點都是空節(jié)點(即 null)蚯嫌,并且是黑色的哲虾。

? ? ??4. 每個紅色節(jié)點的兩個子節(jié)點都是黑色割坠。(從每個葉子到根的路徑上不會有兩個連續(xù)的紅色節(jié)點)

? ? ??5. 從任一節(jié)點到其子樹中每個葉子節(jié)點的路徑都包含相同數(shù)量的黑色節(jié)點。

? ? ??這些約束強化了紅黑樹的關(guān)鍵性質(zhì):從根到葉子的最長的可能路徑不多于最短的可能路徑的兩倍長妒牙。這樣就讓樹大致上是平衡的彼哼。

? ? ??紅黑樹是一個更高效的檢索二叉樹,JDK 提供的集合類 TreeMap湘今、TreeSet 本身就是一個紅黑樹的實現(xiàn)敢朱。


紅黑樹示意圖

TreeMap的使用和底層實現(xiàn)

TreeMap和HashMap實現(xiàn)了同樣的接口Map,因此摩瞎,用法對于調(diào)用者來說沒有區(qū)別拴签。HashMap效率高于TreeMap;在需要排序的Map時才選用TreeMap。

HashSet

其特點為:是無序旗们、不可重復(fù)

HashSet與HashMap的關(guān)系蚓哩?

?HashSet是采用哈希算法實現(xiàn),底層實際是用HashMap實現(xiàn)的(HashSet本質(zhì)就是一個簡化版的HashMap)上渴,因此岸梨,查詢效率和增刪效率都比較高。


TreeSet的底層數(shù)據(jù)結(jié)構(gòu)是:紅黑樹稠氮,通過內(nèi)部比較器和外部比較器去掉重復(fù)元素曹阔。


Hashset自定義對象時,必須重寫hashcode()方法和equals()方法隔披,以下為課堂代碼




TreeSet的使用和底層實現(xiàn)

TreeSet底層實際是用TreeMap實現(xiàn)的赃份,內(nèi)部維持了一個簡化版的TreeMap,通過key來存儲Set的元素奢米。 TreeSet內(nèi)部需要對存儲的元素進(jìn)行排序抓韩,因此,我們對應(yīng)的類需要實現(xiàn)Comparable接口鬓长。這樣谒拴,才能根據(jù)compareTo()方法比較對象之間的大小,才能進(jìn)行內(nèi)部排序痢士。

TreeSet的使用

運行結(jié)果為:



遍歷集合的方法總結(jié)


遍歷List方法一:普通for循環(huán)?

?


遍歷List方法二:增強for循環(huán)(使用泛型!)


遍歷List方法三:使用Iterator迭代器(1)


遍歷List方法四:使用Iterator迭代器(2)


遍歷Set方法一:增強for循環(huán)


遍歷Set方法二:使用Iterator迭代器


遍歷Map方法一:根據(jù)key獲取value


遍歷Map方法二:使用entrySet


集合體系框架總結(jié)表如下:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末彪薛,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子怠蹂,更是在濱河造成了極大的恐慌善延,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件城侧,死亡現(xiàn)場離奇詭異易遣,居然都是意外死亡,警方通過查閱死者的電腦和手機嫌佑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進(jìn)店門豆茫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來侨歉,“玉大人,你說我怎么就攤上這事揩魂∮牡耍” “怎么了?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵火脉,是天一觀的道長牵舵。 經(jīng)常有香客問我,道長倦挂,這世上最難降的妖魔是什么畸颅? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮方援,結(jié)果婚禮上没炒,老公的妹妹穿的比我還像新娘。我一直安慰自己犯戏,他們只是感情好送火,可當(dāng)我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著笛丙,像睡著了一般漾脂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上胚鸯,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天,我揣著相機與錄音笨鸡,去河邊找鬼姜钳。 笑死,一個胖子當(dāng)著我的面吹牛形耗,可吹牛的內(nèi)容都是我干的哥桥。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼激涤,長吁一口氣:“原來是場噩夢啊……” “哼拟糕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起倦踢,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤送滞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后辱挥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體犁嗅,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年晤碘,在試婚紗的時候發(fā)現(xiàn)自己被綠了褂微。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片功蜓。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖宠蚂,靈堂內(nèi)的尸體忽然破棺而出式撼,到底是詐尸還是另有隱情,我是刑警寧澤求厕,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布端衰,位于F島的核電站,受9級特大地震影響甘改,放射性物質(zhì)發(fā)生泄漏旅东。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一十艾、第九天 我趴在偏房一處隱蔽的房頂上張望抵代。 院中可真熱鬧,春花似錦忘嫉、人聲如沸荤牍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽康吵。三九已至,卻和暖如春访递,著一層夾襖步出監(jiān)牢的瞬間晦嵌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工拷姿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留惭载,地道東北人。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓响巢,卻偏偏與公主長得像描滔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子踪古,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,562評論 2 349

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

  • 一伏穆、基本數(shù)據(jù)類型 注釋 單行注釋:// 區(qū)域注釋:/* */ 文檔注釋:/** */ 數(shù)值 對于byte類型而言...
    龍貓小爺閱讀 4,257評論 0 16
  • Java集合類可用于存儲數(shù)量不等的對象,并可以實現(xiàn)常用的數(shù)據(jù)結(jié)構(gòu)如棧,隊列等,Java集合還可以用于保存具有映射關(guān)...
    小徐andorid閱讀 1,922評論 0 13
  • hashmap實現(xiàn)的數(shù)據(jù)結(jié)構(gòu)拘泞,數(shù)組、桶等蜈出。 如圖所示 JDK 1.7田弥,是以數(shù)組+鏈表組成的,鏈表為相同hash的鍵...
    不需要任何閱讀 820評論 0 1
  • 寫在前面 當(dāng)在10億數(shù)據(jù)進(jìn)行不到30次比較就能查找到目標(biāo)時铡原,不禁感嘆編程之魅力偷厦!人類之偉大呀商叹! —— 學(xué)紅黑樹有感...
    安卓大叔閱讀 658,950評論 262 1,258
  • 終于出院。這酸爽…… 今夜風(fēng)大雨急只泼。笑妹說剖笙,媽媽,我給你講個秘密:你是美女请唱,我爸是帥哥弥咪!這是秘密,...
    晴子__閱讀 338評論 5 4