數(shù)據(jù)結(jié)構(gòu) - 二叉樹

1. 樹(Tree)

(1) 基礎(chǔ)概念

1> 節(jié)點(diǎn)
  • 節(jié)點(diǎn)善已、根節(jié)點(diǎn)、父節(jié)點(diǎn)离例、子節(jié)點(diǎn)换团、兄弟節(jié)點(diǎn)
2> 樹、子樹
  • 一棵樹可以沒有任何節(jié)點(diǎn)宫蛆,稱為 空樹
  • 一棵樹可以只有1個(gè)節(jié)點(diǎn)艘包,也就是只有根節(jié)點(diǎn)
  • 子樹、左子樹耀盗、右子樹
3> 度(degree)
  • 節(jié)點(diǎn)的度:子樹的個(gè)數(shù)
  • 樹的度:所有節(jié)點(diǎn)度中的最大值
4> 葉子節(jié)點(diǎn)(leaf)
  • 葉子節(jié)點(diǎn):度為0的節(jié)點(diǎn)
  • 非葉子節(jié)點(diǎn):度不為0的節(jié)點(diǎn)
5> 層數(shù)(level)
  • 層數(shù):根節(jié)點(diǎn)在第1層想虎,根節(jié)點(diǎn)的子節(jié)點(diǎn)在第2層,以此類推
6> 深度(depth)叛拷、高度(height)
  • 節(jié)點(diǎn)的深度:從 根節(jié)點(diǎn) 到 當(dāng)前節(jié)點(diǎn) 的唯一路徑上的 節(jié)點(diǎn)總數(shù)
  • 節(jié)點(diǎn)的高度:從 當(dāng)前節(jié)點(diǎn) 到 最遠(yuǎn)葉子節(jié)點(diǎn) 的路徑上的 節(jié)點(diǎn)總數(shù)
  • 樹的深度:所有節(jié)點(diǎn)深度中的 最大值
  • 樹的高度:所有節(jié)點(diǎn)高度中的 最大值
  • 樹的深度 等于 樹的高度
二叉樹

(2) 樹的種類

  • 有序樹:樹中任意節(jié)點(diǎn)的 子節(jié)點(diǎn)之間 有順序關(guān)系
  • 無序樹(自由樹):樹中任意節(jié)點(diǎn)的 子節(jié)點(diǎn)之間 沒有順序關(guān)系
  • 森林:由m(m≥0)棵 互不相交 的樹組成的集合

2. 二叉樹(Binary Tree)

(1) 基礎(chǔ)概念

1> 二叉樹的特點(diǎn)
  • 每個(gè)節(jié)點(diǎn)的度 最大為2 (最多擁有2棵子樹)
  • 左子樹 和 右子樹 是有順序的
  • 即使某節(jié)點(diǎn)只有一棵子樹磷醋,也要區(qū)分左右子樹
2> 二叉樹的性質(zhì)
  • 非空二叉樹的 第i層,最多有 2^{(i-1)} 個(gè)節(jié)點(diǎn)(i≥1)
  • 在高度為h的二叉樹上 最多有 2^{h} - 1個(gè)節(jié)點(diǎn)(h≥1)
  • 對(duì)于任何一棵非空二叉樹胡诗,如果葉子節(jié)點(diǎn)個(gè)數(shù)為n_0邓线,度為1的節(jié)點(diǎn)個(gè)數(shù)為n_1,度為2的節(jié)點(diǎn)個(gè)數(shù)為n_2
  • 則有: n_0 = n_2 + 1
  • 二叉樹的節(jié)點(diǎn)總數(shù)n = n_0 + n_1 + n_2
  • 二叉樹的邊數(shù)T = n_1+2*n_2 = n-1 = n0+n_1+n_2-1

(2) 真二叉樹(Proper Binary Tree)

  • 真二叉樹:所有節(jié)點(diǎn)的 度 要么為0煌恢,要么為2
真二叉樹骇陈、滿二叉樹

(3) 滿二叉樹(Full Binary Tree)

  • 滿二叉樹:最后一層節(jié)點(diǎn)的度 都為0,其他節(jié)點(diǎn)的度 都為2
  • 在同樣高度的二叉樹中瑰抵,滿二叉樹的葉子節(jié)點(diǎn) 數(shù)量最多你雌、總節(jié)點(diǎn) 數(shù)量最多
  • 滿二叉樹 一定是 真二叉樹,真二叉樹 不一定是 滿二叉樹
  • 假設(shè)滿二叉樹的高度為h(h≥1)二汛,那么
  • 第i層的節(jié)點(diǎn)數(shù)量:2^{i} - 1
  • 葉子節(jié)點(diǎn)數(shù)量:2^{h} - 1
  • 總節(jié)點(diǎn)數(shù)量n
  • n= 2^{h} - 1= 2^{0} + 2^{1} + 2^{2} + ... + 2^{(h-1)}
  • h = log_2{(n+1)}

(4) 完全二叉樹(Complete Binary Tree)

1> 概念
  • 完全二叉樹:對(duì)節(jié)點(diǎn)從上至下婿崭、左至右開始編號(hào),其所有編號(hào)都能與相同高度的滿二叉樹中的編號(hào)對(duì)應(yīng)
  • 葉子節(jié)點(diǎn) 只會(huì)出現(xiàn) 最后2層肴颊,最后1層的 葉子結(jié)點(diǎn) 都靠左對(duì)齊
  • 完全二叉樹從 根結(jié)點(diǎn) 至 倒數(shù)第2層 是一棵 滿二叉樹
  • 滿二叉樹 一定是 完全二叉樹氓栈,完全二叉樹 不一定是 滿二叉樹
完全二叉樹
2> 性質(zhì)
  • 度為1的節(jié)點(diǎn)只有 左子樹
  • 度為1的節(jié)點(diǎn)要么 是1個(gè),要么 是0個(gè)
  • 同樣節(jié)點(diǎn)數(shù)量的二叉樹婿着,完全二叉樹的 高度最小
  • 假設(shè)完全二叉樹的 高度為h (h≥1)授瘦,那么
  • 至少有2^{(h-1)} 個(gè)節(jié)點(diǎn)( 2^{0} + 2^{1} + 2^{2} + ... + 2^{(h-2)} + 1 )
  • 最多有 2^{h} - 1 個(gè)節(jié)點(diǎn)( 2^{0} + 2^{1} + 2^{2} + ... + 2^{(h-1)}醋界,滿二叉樹 )
  • 總節(jié)點(diǎn)數(shù)量為n
  • 2^{(h-1)} ≤ n < 2^{h}
  • h - 1 ≤ log_2{n} < h
  • h = floor(log_2{n}) + 1
  • 【floor是向下取整,ceiling是向上取整】
  • 一棵有 n個(gè)節(jié)點(diǎn)的完全二叉樹(n>0)提完,從上到下形纺、從左到右對(duì)節(jié)點(diǎn)從1開始進(jìn)行編號(hào),對(duì)任意第i個(gè)節(jié)點(diǎn)
  • 如果 i = 1徒欣,它是根節(jié)點(diǎn)
  • 如果 i > 1逐样,它的父節(jié)點(diǎn)編號(hào)為 floor( i / 2 )
  • 如果 2i ≤ n,它的左子節(jié)點(diǎn)編號(hào)為 2i
  • 如果 2i > n打肝,它無左子節(jié)點(diǎn)
  • 如果 2i + 1 ≤ n官研,它的右子節(jié)點(diǎn)編號(hào)為 2i + 1
  • 如果 2i + 1 > n,它無右子節(jié)點(diǎn)

3. 面試題

Q: 如果一棵完全二叉樹有768個(gè)節(jié)點(diǎn)闯睹,求葉子節(jié)點(diǎn)的個(gè)數(shù)戏羽?

解題步驟一:

  • 假設(shè)葉子節(jié)點(diǎn)個(gè)數(shù)為n_0,度為1的節(jié)點(diǎn)個(gè)數(shù)為n_1楼吃,度為2的節(jié)點(diǎn)個(gè)數(shù)為n_2
  • 總結(jié)點(diǎn)個(gè)數(shù)n = n_0 + n_1 + n_2始花,而且n_0 = n_2 + 1
  • n = 2n_0 + n_1 - 1

解題步驟二:

  • 完全二叉樹的n_1要么為0,要么為1:
  • n_1為1時(shí)孩锡,n = 2n_0酷宵,n必然是偶數(shù)
  • 葉子節(jié)點(diǎn)個(gè)數(shù)n_0 = n / 2,非葉子節(jié)點(diǎn)個(gè)數(shù)n_1 + n_2= n / 2
  • n_1為0時(shí)躬窜,n = 2n_0 - 1浇垦,n必然是奇數(shù)
  • 葉子節(jié)點(diǎn)個(gè)數(shù)n_0= (n + 1) / 2,非葉子節(jié)點(diǎn)個(gè)數(shù)n_1 + n_2 = (n - 1) / 2

解題步驟三:

  • 葉子節(jié)點(diǎn)個(gè)數(shù)n_0= floor((n + 1) / 2) = ceiling(n / 2)
  • 非葉子節(jié)點(diǎn)個(gè)數(shù)n_1 + n_2= floor(n / 2) = ceiling((n - 1) / 2)
  • floor((n + 1) / 2) 即 (n + 1) / 2 或 (n + 1) >> 1

得出答案:

  • 因此葉子節(jié)點(diǎn)個(gè)數(shù)為 768 / 2 = 384
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末荣挨,一起剝皮案震驚了整個(gè)濱河市男韧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌默垄,老刑警劉巖此虑,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異口锭,居然都是意外死亡朦前,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門鹃操,熙熙樓的掌柜王于貴愁眉苦臉地迎上來韭寸,“玉大人,你說我怎么就攤上這事荆隘《魉牛” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵臭胜,是天一觀的道長莫其。 經(jīng)常有香客問我癞尚,道長耸三,這世上最難降的妖魔是什么乱陡? 我笑而不...
    開封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮仪壮,結(jié)果婚禮上憨颠,老公的妹妹穿的比我還像新娘。我一直安慰自己积锅,他們只是感情好爽彤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著缚陷,像睡著了一般适篙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上箫爷,一...
    開封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天嚷节,我揣著相機(jī)與錄音,去河邊找鬼虎锚。 笑死硫痰,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的窜护。 我是一名探鬼主播效斑,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼柱徙!你這毒婦竟也來了缓屠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤护侮,失蹤者是張志新(化名)和其女友劉穎藏研,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體概行,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蠢挡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了凳忙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片业踏。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖涧卵,靈堂內(nèi)的尸體忽然破棺而出勤家,到底是詐尸還是另有隱情,我是刑警寧澤柳恐,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布伐脖,位于F島的核電站热幔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏讼庇。R本人自食惡果不足惜绎巨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蠕啄。 院中可真熱鬧场勤,春花似錦、人聲如沸歼跟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哈街。三九已至留瞳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間骚秦,已是汗流浹背她倘。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留骤竹,地道東北人帝牡。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像蒙揣,于是被迫代替她去往敵國和親靶溜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

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