二叉樹(shù)的概念及面試題大全

1. 二叉樹(shù)(Binary Tree)的定義

1.1 什么是二叉樹(shù)(Binary Tree)

每個(gè)結(jié)點(diǎn)至多擁有兩棵子樹(shù)的樹(shù)結(jié)構(gòu)(即二叉樹(shù)中不存在度大于2的結(jié)點(diǎn))胧卤。并且惦蚊,二叉樹(shù)的子樹(shù)有左右之分将硝,其次序不能任意顛倒塔淤。

上面概念中提到了“度”的概念干旧,“度”其實(shí)就是某個(gè)節(jié)點(diǎn)子節(jié)點(diǎn)的數(shù)量。如果某個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn)數(shù)量為1涕俗,則該節(jié)點(diǎn)的度為1罗丰,如果有8個(gè)子節(jié)點(diǎn),則度為8再姑,以此類推萌抵。

1.2 二叉樹(shù)的術(shù)語(yǔ)

除了二叉樹(shù)的定義外,還有許多相關(guān)的術(shù)語(yǔ)元镀。單純介紹術(shù)語(yǔ)可能不容易理解绍填,這里給出一幅圖進(jìn)行說(shuō)明。


圖1 二叉樹(shù)的主要概念

下面是對(duì)二叉樹(shù)中主要術(shù)語(yǔ)的解釋:
結(jié)點(diǎn)的度(Degree):結(jié)點(diǎn)的子樹(shù)個(gè)數(shù)栖疑;
樹(shù)的度:樹(shù)的所有結(jié)點(diǎn)中最大的度數(shù)讨永;
葉結(jié)點(diǎn)(Leaf):度為0的結(jié)點(diǎn);
父結(jié)點(diǎn)(Parent):有子樹(shù)的結(jié)點(diǎn)是其子樹(shù)的根節(jié)點(diǎn)的父結(jié)點(diǎn)遇革;
子結(jié)點(diǎn)/孩子結(jié)點(diǎn)(Child):若A結(jié)點(diǎn)是B結(jié)點(diǎn)的父結(jié)點(diǎn)卿闹,則稱B結(jié)點(diǎn)是A結(jié)點(diǎn)的子結(jié)點(diǎn);
兄弟結(jié)點(diǎn)(Sibling):具有同一個(gè)父結(jié)點(diǎn)的各結(jié)點(diǎn)彼此是兄弟結(jié)點(diǎn)萝快;
路徑和路徑長(zhǎng)度:從結(jié)點(diǎn)n1到nk的路徑為一個(gè)結(jié)點(diǎn)序列n1锻霎,n2,...杠巡,nk量窘。ni是ni+1的父結(jié)點(diǎn)雇寇。路徑所包含邊的個(gè)數(shù)為路徑的長(zhǎng)度氢拥;
祖先結(jié)點(diǎn)(Ancestor):沿樹(shù)根到某一結(jié)點(diǎn)路徑上的所有結(jié)點(diǎn)都是這個(gè)結(jié)點(diǎn)的祖先結(jié)點(diǎn);
子孫結(jié)點(diǎn)(Descendant):某一結(jié)點(diǎn)的子樹(shù)中的所有結(jié)點(diǎn)是這個(gè)結(jié)點(diǎn)的子孫锨侯;
結(jié)點(diǎn)的層次(Level):規(guī)定根結(jié)點(diǎn)在1層嫩海,其他任一結(jié)點(diǎn)的層數(shù)是其父結(jié)點(diǎn)的層數(shù)加1;
樹(shù)的深度(Depth):樹(shù)中所有結(jié)點(diǎn)中的最大層次是這棵樹(shù)的深度囚痴;

1.3 二叉樹(shù)的性質(zhì)

我們?cè)O(shè)定二叉樹(shù)的根節(jié)點(diǎn)為為第1層叁怪,則二叉樹(shù)有如下性質(zhì)。這些性質(zhì)可以通過(guò)數(shù)學(xué)方式進(jìn)行證明深滚,但本文暫時(shí)不做證明奕谭,大家了解即可,對(duì)于理解后續(xù)概念有一些幫助:
性質(zhì)1:二叉樹(shù)第i層上最多有 2^(i-1) 個(gè)結(jié)點(diǎn)(i≥1)痴荐;
性質(zhì)2:深度(高度)為k的二叉樹(shù)至多有2^(k)-1個(gè)結(jié)點(diǎn)(k≥1血柳,深度k也就是樹(shù)的最大層級(jí));
性質(zhì)3:包含n個(gè)結(jié)點(diǎn)的二叉樹(shù)的深度(高度)至少為log2 (n+1)生兆;
性質(zhì)4:在任意一棵二叉樹(shù)中难捌,如果其葉子結(jié)點(diǎn)(度為0)數(shù)為m, 度為2的結(jié)點(diǎn)數(shù)為n, 則m = n + 1。

1.4 二叉樹(shù)的數(shù)據(jù)存儲(chǔ)

二叉樹(shù)在C語(yǔ)言中可以通過(guò)結(jié)構(gòu)體表示,其定義的方式可以是如下:

struct bitree_node {
        int b_data;                //數(shù)據(jù)域根吁,指向具體的數(shù)據(jù)
        struct bitree_node *left;  //指向左子節(jié)點(diǎn)
        struct bitree_node *right; //指向右子節(jié)點(diǎn)
};

在這個(gè)實(shí)例中员淫,為了簡(jiǎn)單,我們假設(shè)其存儲(chǔ)的數(shù)據(jù)類型為整型數(shù)击敌,當(dāng)然最好的方式是void指針的形式介返。這樣,二叉樹(shù)就是一個(gè)通用的數(shù)據(jù)結(jié)構(gòu)沃斤,可以存儲(chǔ)任何類型的數(shù)據(jù)映皆。

圖2 二叉樹(shù)的數(shù)據(jù)存儲(chǔ)

2. 二叉樹(shù)的特例

根據(jù)二叉樹(shù)存儲(chǔ)數(shù)據(jù)組織結(jié)構(gòu)的差異,二叉樹(shù)有很多特例轰枝。比如有些二叉樹(shù)所有節(jié)點(diǎn)只有左子節(jié)點(diǎn)捅彻,或者非葉子節(jié)點(diǎn)的每個(gè)二叉樹(shù)的節(jié)點(diǎn)都有2個(gè)子節(jié)點(diǎn)等等。下面我們分別進(jìn)行介紹鞍陨。

2.1 斜二叉樹(shù)

只有左子節(jié)點(diǎn)或只有右子節(jié)點(diǎn)的二叉樹(shù)稱為斜二叉樹(shù)步淹。


圖3 斜二叉樹(shù)

2.2 完美二叉樹(shù)

一個(gè)深度為k(>=-1)且有2^(k+1) - 1個(gè)結(jié)點(diǎn)的二叉樹(shù)稱為完美二叉樹(shù)。完美二叉樹(shù)也就是滿二叉樹(shù)诚撵,也就是所有非葉子節(jié)點(diǎn)都有2個(gè)葉子節(jié)點(diǎn)缭裆,并且每一次都是滿的。如圖所示:


圖4 完美二叉樹(shù)

2.3 完全二叉樹(shù)(Complete)

完全二叉樹(shù)從根結(jié)點(diǎn)到倒數(shù)第二層滿足完美二叉樹(shù)寿烟,最后一層可以不完全填充澈驼,其葉子結(jié)點(diǎn)都靠左對(duì)齊。
下圖就不是一棵完全(Complete)二叉樹(shù)


圖5 完全二叉樹(shù)

3. 二叉樹(shù)相關(guān)的算法(面試題)

在面試和筆試的過(guò)程中筛武,二叉樹(shù)的題目是非常多的缝其。除了常見(jiàn)的關(guān)于二叉樹(shù)遍歷的題目外,還有其它一些延伸的題目徘六。本文今天先將二叉樹(shù)相關(guān)的題目羅列到這里内边,后續(xù)會(huì)給出每個(gè)題目的解題思路和代碼示例。

3.1 二叉樹(shù)的前序遍歷(遞歸&非遞歸待锈,下同)

3.2 二叉樹(shù)的中序遍歷

3.3 二叉樹(shù)的后序遍歷

3.4 二叉樹(shù)層序遍歷

3.5 求二叉樹(shù)的高度

3.6 求二叉樹(shù)節(jié)點(diǎn)個(gè)數(shù)

3.7 求二叉樹(shù)第k層的節(jié)點(diǎn)個(gè)數(shù)

3.8 求二叉樹(shù)中葉子節(jié)點(diǎn)的個(gè)數(shù)

3.9 判斷一個(gè)節(jié)點(diǎn)是否在一棵二叉樹(shù)中

3.10 判斷兩棵二叉樹(shù)是否相同的樹(shù)

3.11 判斷二叉樹(shù)是不是平衡二叉樹(shù)

3.12 求二叉樹(shù)的鏡像

3. 13 判斷兩個(gè)二叉樹(shù)是否互相鏡像

3.14 從二叉樹(shù)中查找結(jié)點(diǎn)

3.15 求二叉樹(shù)中兩個(gè)節(jié)點(diǎn)的最低公共祖先節(jié)點(diǎn)

3.16 判斷是否為二分查找樹(shù)BST

3.17 二叉搜索樹(shù)中第K小的元素

3.18 填充每個(gè)節(jié)點(diǎn)的下一個(gè)右側(cè)節(jié)點(diǎn)指針(完美二叉樹(shù))

3.19 填充每個(gè)節(jié)點(diǎn)的下一個(gè)右側(cè)節(jié)點(diǎn)指針(普通二叉樹(shù))

3.20 表達(dá)式轉(zhuǎn)二叉樹(shù)

3.21 表達(dá)式求值

3.22 求兩個(gè)節(jié)點(diǎn)的最近公共祖先

3.23 求二叉樹(shù)中最遠(yuǎn)的兩個(gè)節(jié)點(diǎn)的距離

3.24 由前序遍歷和中序遍歷重建二叉樹(shù)

3.25 判斷一棵樹(shù)是否是完全二叉樹(shù)

3.26 將二叉搜索樹(shù)轉(zhuǎn)換成一個(gè)排序的雙向鏈表漠其。要求不能創(chuàng)建任何新的結(jié)點(diǎn),只能調(diào)整樹(shù)中結(jié)點(diǎn)指針的指向

3.27 求二叉樹(shù)的寬度

3.28 判斷一棵二叉樹(shù)是否是平衡二叉樹(shù)

3.28 判斷一顆二叉樹(shù)是否是另一顆樹(shù)的子樹(shù)

參考文獻(xiàn)

  1. https://www.cnblogs.com/33debug/p/7252371.html
  2. https://www.cnblogs.com/33debug/p/7248822.html
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末竿音,一起剝皮案震驚了整個(gè)濱河市和屎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌春瞬,老刑警劉巖柴信,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異快鱼,居然都是意外死亡颠印,警方通過(guò)查閱死者的電腦和手機(jī)纲岭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)线罕,“玉大人止潮,你說(shuō)我怎么就攤上這事〕ィ” “怎么了喇闸?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)询件。 經(jīng)常有香客問(wèn)我燃乍,道長(zhǎng),這世上最難降的妖魔是什么宛琅? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任刻蟹,我火速辦了婚禮,結(jié)果婚禮上嘿辟,老公的妹妹穿的比我還像新娘舆瘪。我一直安慰自己,他們只是感情好红伦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布英古。 她就那樣靜靜地躺著,像睡著了一般昙读。 火紅的嫁衣襯著肌膚如雪召调。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,737評(píng)論 1 305
  • 那天蛮浑,我揣著相機(jī)與錄音唠叛,去河邊找鬼。 笑死陵吸,一個(gè)胖子當(dāng)著我的面吹牛玻墅,可吹牛的內(nèi)容都是我干的介牙。 我是一名探鬼主播壮虫,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼环础!你這毒婦竟也來(lái)了囚似?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤线得,失蹤者是張志新(化名)和其女友劉穎饶唤,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體贯钩,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡募狂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年办素,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片祸穷。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡性穿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出雷滚,到底是詐尸還是另有隱情需曾,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布祈远,位于F島的核電站呆万,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏车份。R本人自食惡果不足惜谋减,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望扫沼。 院中可真熱鬧逃顶,春花似錦、人聲如沸充甚。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)伴找。三九已至盈蛮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間技矮,已是汗流浹背抖誉。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留衰倦,地道東北人袒炉。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像樊零,于是被迫代替她去往敵國(guó)和親我磁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

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