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

什么是”樹“

樹(tree)是包含n(n>0)個(gè)結(jié)點(diǎn)的有窮集造寝,其中:
(1)每個(gè)元素稱為結(jié)點(diǎn)(node)
(2)有一個(gè)特定的結(jié)點(diǎn)被稱為根結(jié)點(diǎn)或樹根(root)
(3)除根結(jié)點(diǎn)之外的其余數(shù)據(jù)元素被分為m(m≥0)個(gè)互不相交的集合T1垂睬,T2整陌,……Tm-1说搅,其中每一個(gè)集合Ti(1<=i<=m)本身也是一棵樹静浴,被稱作原樹的子樹(subtree)击儡。
樹也可以這樣定義:樹是由根結(jié)點(diǎn)和若干顆子樹構(gòu)成的术奖。樹是由一個(gè)集合以及在該集合上定義的一種關(guān)系構(gòu)成的站楚。集合中的元素稱為樹的結(jié)點(diǎn)脱惰,所定義的關(guān)系稱為父子關(guān)系。父子關(guān)系在樹的結(jié)點(diǎn)之間建立了一個(gè)層次結(jié)構(gòu)窿春。在這種層次結(jié)構(gòu)中有一個(gè)結(jié)點(diǎn)具有特殊的地位拉一,這個(gè)結(jié)點(diǎn)稱為該樹的根結(jié)點(diǎn)采盒,或稱為樹根。
我們可以形式地給出樹的遞歸定義如下:
單個(gè)結(jié)點(diǎn)是一棵樹蔚润,樹根就是該結(jié)點(diǎn)本身磅氨。
設(shè)T1,T2,..,Tk是樹,它們的根結(jié)點(diǎn)分別為n1,n2,..,nk嫡纠。用一個(gè)新結(jié)點(diǎn)n作為n1,n2,..,nk的父親烦租,則得到一棵新樹,結(jié)點(diǎn)n就是新樹的根除盏。我們稱n1,n2,..,nk為一組兄弟結(jié)點(diǎn)叉橱,它們都是結(jié)點(diǎn)n的子結(jié)點(diǎn)。我們還稱T1,T2,..,Tk為結(jié)點(diǎn)n的子樹痴颊。
空集合也是樹赏迟,稱為空樹〈览猓空樹中沒有結(jié)點(diǎn)。

相關(guān)概念:

  • 節(jié)點(diǎn)的度:一個(gè)節(jié)點(diǎn)含有的子樹的個(gè)數(shù)成為該節(jié)點(diǎn)的度
  • 葉節(jié)點(diǎn)或終端節(jié)點(diǎn):度為0的節(jié)點(diǎn)成為葉節(jié)點(diǎn)
  • 非終端節(jié)點(diǎn)或分支節(jié)點(diǎn):度不為0的節(jié)點(diǎn)
  • 雙親節(jié)點(diǎn)或者父節(jié)點(diǎn):若一個(gè)節(jié)點(diǎn)含有子節(jié)點(diǎn)甩栈,則這個(gè)節(jié)點(diǎn)成為其子節(jié)點(diǎn)的父節(jié)點(diǎn)
  • 孩子節(jié)點(diǎn)或者子節(jié)點(diǎn):一個(gè)節(jié)點(diǎn)含有的子樹的根節(jié)點(diǎn)稱為該節(jié)點(diǎn)的子節(jié)點(diǎn)
  • 兄弟節(jié)點(diǎn):具有相同父節(jié)點(diǎn)的節(jié)點(diǎn)互稱為兄弟節(jié)點(diǎn)
  • 節(jié)點(diǎn)的層次:從根節(jié)點(diǎn)定義起泻仙,根節(jié)點(diǎn)為第一層,根節(jié)點(diǎn)的子節(jié)點(diǎn)為第二層量没,以此類推
  • 樹的高度或深度:樹中最大的層次
  • 堂兄弟節(jié)點(diǎn):雙親在同一層的節(jié)點(diǎn)互稱堂兄弟
  • 節(jié)點(diǎn)的祖先:從根節(jié)點(diǎn)到該節(jié)點(diǎn)所經(jīng)分支上的所有節(jié)點(diǎn)
  • 子孫:以某節(jié)點(diǎn)為根的子樹中任一節(jié)點(diǎn)都成為該節(jié)點(diǎn)的子孫

樹的種類:

  • 無序樹:樹中任意節(jié)點(diǎn)的子結(jié)點(diǎn)之間沒有順序關(guān)系玉转,這種樹稱為無序樹,也稱為自由樹
  • 有序樹:樹中任意節(jié)點(diǎn)的子結(jié)點(diǎn)之間有順序關(guān)系,這種樹稱為有序樹
  • 二叉樹:每個(gè)節(jié)點(diǎn)最多含有兩個(gè)子樹的樹稱為二叉樹
  • 滿二叉樹:除最后一層無任何子節(jié)點(diǎn)外殴蹄,每一層上的所有結(jié)點(diǎn)都有兩個(gè)子結(jié)點(diǎn)二叉樹究抓。
  • 完全二叉樹: 若設(shè)二叉樹的深度為h,除第 h 層外袭灯,其它各層 (1~h-1) 的結(jié)點(diǎn)數(shù)都達(dá)到最大個(gè)數(shù)刺下,第 h 層所有的結(jié)點(diǎn)都連續(xù)集中在最左邊,這就是完全二叉樹稽荧。完全二叉樹是由滿二叉樹而引出來的橘茉。對(duì)于深度為K的,有N個(gè)結(jié)點(diǎn)的二叉樹姨丈,當(dāng)且僅當(dāng)其每一個(gè)結(jié)點(diǎn)都與深度為K的滿二叉樹中編號(hào)從1至n的結(jié)點(diǎn)一一對(duì)應(yīng)時(shí)稱之為完全二叉樹.若一棵二叉樹至多只有最下面的兩層上的結(jié)點(diǎn)的度數(shù)可以小于2畅卓,并且最下層上的結(jié)點(diǎn)都集中在該層最左邊的若干位置上,則此二叉樹成為完全二叉樹蟋恬。
  • 霍夫曼樹:帶權(quán)路徑最短的二叉樹稱為哈夫曼樹或最優(yōu)二叉樹

樹的遍歷:

  1. 先序遍歷:從根節(jié)點(diǎn)開始翁潘,先遍歷左子樹,然后遍歷右子樹歼争,在遍歷子樹的時(shí)候拜马,依舊按照從根節(jié)點(diǎn)遍歷左右子樹的原則遍歷(A,B,D,E,C,F)
  2. 中序遍歷:從最左的葉子節(jié)點(diǎn)開始箱歧,先遍歷左節(jié)點(diǎn),然后根節(jié)點(diǎn)一膨,再右節(jié)點(diǎn)(D,B,E,A,F,C)
  3. 后序遍歷:從最左的葉子節(jié)點(diǎn)開始呀邢,先遍歷左節(jié)點(diǎn),然后右節(jié)點(diǎn)豹绪,再跟節(jié)點(diǎn)(D,E,B,F,C,A)

二叉樹:

對(duì)樹而言价淌,需要重點(diǎn)掌握二叉樹。二叉樹是一種特殊的順序樹瞒津,它規(guī)定有左右兩個(gè)孩子蝉衣,即左右孩子順序不能替換,所以二叉樹是一種有序樹巷蚪。二叉樹的結(jié)點(diǎn)數(shù)為大于0小于等于2病毡。

二叉樹性質(zhì):

對(duì)樹而言,需要重點(diǎn)掌握二叉樹屁柏。二叉樹是一種特殊的順序樹啦膜,它規(guī)定有左右兩個(gè)孩子,即左右孩子順序不能替換淌喻,所以二叉樹是一種有序樹僧家。二叉樹的結(jié)點(diǎn)數(shù)為大于0小于等于2。對(duì)于二叉樹裸删,需要掌握以下性質(zhì):

性質(zhì)1:
在二叉樹的第i層上至多有

個(gè)結(jié)點(diǎn)(i>=1)八拱,由數(shù)據(jù)歸納法即可證明:
i=1,結(jié)點(diǎn)數(shù)為1
i=2涯塔,結(jié)點(diǎn)數(shù)為2
i=3肌稻,結(jié)點(diǎn)數(shù)為4
i=4,結(jié)點(diǎn)數(shù)為8
i=n, 結(jié)點(diǎn)數(shù)為:

性質(zhì)2:
深度為K的二叉樹至多有

個(gè)結(jié)點(diǎn)(k >=1)
換言之匕荸,如果二叉樹的深度確定爹谭,則其最大的結(jié)點(diǎn)數(shù)也是確定的。
證明(可以利用性質(zhì)1)
深度為K的二叉樹的結(jié)點(diǎn)個(gè)數(shù)=二叉樹中每一層結(jié)點(diǎn)個(gè)數(shù)的總和每聪。即為:
![](http://latex.codecogs.com/svg.latex?\sum_{i=1}{k}2{i-1} = 1+2+4+8+…+2{k-1}=2{k}-1)
(等比公式)

性質(zhì)3:
二叉樹中旦棉,終端結(jié)點(diǎn)

個(gè)數(shù)與度為2的結(jié)點(diǎn)個(gè)數(shù)
有如下關(guān)系:

(注:度表示分支的個(gè)數(shù),也指分支因子药薯,終端結(jié)點(diǎn)也指葉子結(jié)點(diǎn))
分析:二叉樹中結(jié)點(diǎn)的度可以為0,1,2绑洛,也就是說需要證明結(jié)點(diǎn)的度為0與度為2的結(jié)點(diǎn)之間的關(guān)系是不變的。
證明:設(shè)二叉樹中度為i的結(jié)點(diǎn)數(shù)為

則整棵二叉樹的結(jié)點(diǎn)總數(shù)為:
(1)
(1)

除根結(jié)點(diǎn)外童本,每一個(gè)結(jié)點(diǎn)都是另一個(gè)結(jié)點(diǎn)的孩子真屯,所以孩子數(shù)為(2):n-1
度為i(I = 0,1,2)的結(jié)點(diǎn),有i個(gè)孩子穷娱,
孩子數(shù) =
(3)
(3)

因?yàn)椋?3) = (2),所以绑蔫,
(4)
(4)

(4) – (1) ,得:

證畢.
性質(zhì)1运沦、2、3是二叉樹的通用特性配深。
在介紹其它性質(zhì)之前携添,先了解另一種特殊的二叉樹,即滿二叉樹篓叶,其定義如下:
滿二叉樹是指深度為K烈掠,且有)2^{k}-1)個(gè)結(jié)點(diǎn)的二叉樹。
特點(diǎn):(1) 每層上結(jié)點(diǎn)數(shù)都達(dá)到最大
(2) 度為1的結(jié)點(diǎn)個(gè)數(shù)=0,即不存在分支數(shù)為1的結(jié)點(diǎn)
如下即為一棵滿二叉樹:(注意其順序:結(jié)點(diǎn)層序編號(hào)方法缸托,從根結(jié)點(diǎn)起從上至下逐層從左至右對(duì)二叉樹的結(jié)點(diǎn)進(jìn)行連續(xù)編號(hào))

           1
         /   \
       2       3
     /   \   /   \
    4     5 6     7

當(dāng)K = 3, 結(jié)點(diǎn)數(shù)

完全二叉樹:深度為k,結(jié)點(diǎn)數(shù)為n的二叉樹左敌,當(dāng)且僅當(dāng)每個(gè)結(jié)點(diǎn)的編號(hào)都與相同深度的滿二叉樹中從1到n的結(jié)點(diǎn)一一對(duì)應(yīng)時(shí),稱為完全二叉樹俐镐。

根據(jù)定義可以理解:深度為k的完全二叉樹矫限,其結(jié)點(diǎn)總數(shù)比深度k-1的滿二叉樹要多,但一定比深度為k的滿二叉樹要少佩抹。即有
:完全二叉樹示意如下:
                          1
                         / \
                        2   3
                       / \ 
                      4   5   (注意編號(hào)順序叼风,與滿二叉樹一一對(duì)應(yīng))

性質(zhì)4:結(jié)點(diǎn)數(shù)為n的完全二叉樹,其深度為

(向下取整)+ 1
由性質(zhì)2及完全二叉樹的定義有:
結(jié)點(diǎn)數(shù)滿足:



可寫成:

有:

向下取整匹摇,


性質(zhì)5:在按層序編號(hào)的n個(gè)結(jié)點(diǎn)的完全二叉樹中咬扇,任意一個(gè)結(jié)點(diǎn)i(1<=i<=n)有:
(1)i = 1時(shí),結(jié)點(diǎn)i是樹的根廊勃,否則(i> 1),結(jié)點(diǎn)i的雙親為i/2(向下取整),如
2<=i=2.5<=3,取i = 2.
(2)2i > n時(shí)经窖,結(jié)點(diǎn)i無左孩子坡垫,為葉結(jié)點(diǎn),否則結(jié)點(diǎn)i的左孩子為結(jié)點(diǎn)2i
(3) 2i+1 > n時(shí)画侣,結(jié)點(diǎn)i無右孩子冰悠,否則結(jié)點(diǎn)i的右孩子為結(jié)點(diǎn)2i +1.
性質(zhì)4與性質(zhì)五是針對(duì)完全二叉樹而言的。性質(zhì)6是針對(duì)二叉樹的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)而言配乱。

性質(zhì)6: 含有n個(gè)結(jié)點(diǎn)的二叉鏈表中溉卓,有n + 1個(gè)空鏈域。

證明:空鏈域數(shù) =

因?yàn)?
(1)
(1)

又有
(2)
(2)
(根據(jù)性質(zhì)3)
(2)-(1):

=空鏈域數(shù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末搬泥,一起剝皮案震驚了整個(gè)濱河市桑寨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌忿檩,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異斥扛,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)辨图,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肢藐,“玉大人故河,你說我怎么就攤上這事∵罕” “怎么了鱼的?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)瞻讽。 經(jīng)常有香客問我鸳吸,道長(zhǎng),這世上最難降的妖魔是什么速勇? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任晌砾,我火速辦了婚禮,結(jié)果婚禮上烦磁,老公的妹妹穿的比我還像新娘养匈。我一直安慰自己,他們只是感情好都伪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布呕乎。 她就那樣靜靜地躺著,像睡著了一般陨晶。 火紅的嫁衣襯著肌膚如雪猬仁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天先誉,我揣著相機(jī)與錄音湿刽,去河邊找鬼。 笑死褐耳,一個(gè)胖子當(dāng)著我的面吹牛诈闺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播铃芦,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼雅镊,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了刃滓?” 一聲冷哼從身側(cè)響起仁烹,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎注盈,沒想到半個(gè)月后晃危,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年僚饭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了震叮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鳍鸵,死狀恐怖苇瓣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情偿乖,我是刑警寧澤击罪,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站贪薪,受9級(jí)特大地震影響媳禁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜画切,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一竣稽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧霍弹,春花似錦毫别、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至耍缴,卻和暖如春砾肺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背防嗡。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工债沮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人本鸣。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像硅蹦,于是被迫代替她去往敵國(guó)和親荣德。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

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