數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)第四彈 二叉樹的性質(zhì)和存儲(chǔ)結(jié)構(gòu)

二叉樹的性質(zhì)

滿二叉樹

性質(zhì)1:

在二叉樹的第i層上至多有2^(i-1)個(gè)結(jié)點(diǎn)(i>0)

因?yàn)橐粋€(gè)節(jié)點(diǎn)度不大于2(即每個(gè)結(jié)點(diǎn)只能有兩棵子樹)瀑凝,如果假設(shè)這棵二叉樹是一棵滿二叉樹,那么每個(gè)結(jié)點(diǎn)都有兩棵子樹,按每層來看的話芯砸,會(huì)發(fā)現(xiàn)它是首項(xiàng)為1蒲赂,公比為2的等比數(shù)列,所以第i層最多有2^(i-1)個(gè)結(jié)點(diǎn)(i>0)

性質(zhì)2:

一棵深度為k的二叉樹中醋安,最多有2^k-1個(gè)結(jié)點(diǎn)

其實(shí)這也很好得出這個(gè)性質(zhì)杂彭,既然每層的結(jié)點(diǎn)數(shù)量就是等比數(shù)列的一項(xiàng),那么深度為k的樹吓揪,假設(shè)為滿二叉樹亲怠,那么結(jié)點(diǎn)總數(shù)就是等比數(shù)列求和,所以柠辞,一棵深度為k的二叉樹中团秽,最多有2^k-1個(gè)結(jié)點(diǎn)

性質(zhì)3:

具有n個(gè)結(jié)點(diǎn)的完全二叉樹的深度k為[log2n]+1

其實(shí)就是性質(zhì)2的逆推,假設(shè)有棵深度為x的完全二叉樹钾腺,那么他的結(jié)點(diǎn)總數(shù)的范圍為2^(k-1)-1 < n <= 2^k-1徙垫,兩邊同時(shí)取對(duì)數(shù)得k-1 < og2n <= k,具有n個(gè)結(jié)點(diǎn)的完全二叉樹的深度k為[log2n]+1

性質(zhì)4:

對(duì)于一棵非空的二叉樹放棒,如果葉子結(jié)點(diǎn)數(shù)為n0姻报,度為2的結(jié)點(diǎn)數(shù)為n2,
n0 = n2+1

整棵樹的結(jié)點(diǎn)數(shù): n = n0+n1+n2 (n0葉子結(jié)點(diǎn)數(shù)间螟,n1度為1的結(jié)點(diǎn)數(shù)吴旋,n2度為2的結(jié)點(diǎn)數(shù))
根據(jù)節(jié)點(diǎn)度的定義子結(jié)點(diǎn)的的數(shù)量為: n0×0+n1×1+n2×2
子節(jié)點(diǎn)的數(shù)量為:n-1 (除根以外每個(gè)結(jié)點(diǎn)都是子節(jié)點(diǎn))
所以解得 n0 = n2+1

性質(zhì)5:

對(duì)于具有n個(gè)節(jié)點(diǎn)的完全二叉樹,如果按照從上至下和從左至右的順序?qū)Χ鏄渲兴薪Y(jié)點(diǎn)進(jìn)行從1的編號(hào)厢破,則對(duì)于任意的序號(hào)為i結(jié)點(diǎn)荣瑟,有:

  • 如果i>1,則序號(hào)為i的結(jié)點(diǎn)的雙親結(jié)點(diǎn)為i/2摩泪,如果i==1笆焰,則序號(hào)為i的結(jié)點(diǎn)是根節(jié)點(diǎn),無雙親結(jié)點(diǎn)
  • 如果2i<=n见坑,則序號(hào)為i的結(jié)點(diǎn)的左孩子節(jié)點(diǎn)的序號(hào)為2i嚷掠,否則i結(jié)點(diǎn)無左孩子
  • 如果2i+1<=n,則序號(hào)為i的結(jié)點(diǎn)的右孩子節(jié)點(diǎn)的序號(hào)為2i荞驴,否則i結(jié)點(diǎn)無右孩子

注意:性質(zhì)1,2,4所有二叉樹都通用不皆,性質(zhì)3,5只有完全二叉樹適用

二叉樹的存儲(chǔ)結(jié)構(gòu)

二叉樹的存儲(chǔ)方式也可以分為順序存儲(chǔ)結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)兩種存儲(chǔ)結(jié)構(gòu)

二叉樹的順序存儲(chǔ)結(jié)構(gòu)

這里的順序存儲(chǔ)也是用一組連續(xù)的存儲(chǔ)單元依次從上至下,從左至右存儲(chǔ)二叉樹上的節(jié)點(diǎn)元素熊楼。對(duì)于完全二叉樹來說樹中結(jié)點(diǎn)的序號(hào)都是按照從上至下霹娄,從左至右進(jìn)行編排的,所以結(jié)點(diǎn)的序號(hào)可以唯一的反映節(jié)點(diǎn)之間的邏輯關(guān)系(性質(zhì)5)


完全二叉樹

存儲(chǔ)在數(shù)組中,數(shù)組下表從零開始

數(shù)組下標(biāo) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8
-------|----------------------------------
數(shù)據(jù) | A | B | C | D | E | F | G | H | I

如果是一般的二叉樹的話犬耻,如果我在對(duì)他進(jìn)行從上至下踩晶,從左至右進(jìn)行編號(hào)時(shí)就不能很好的反映數(shù)組元素之間的關(guān)系了,如果我們進(jìn)行適當(dāng)?shù)母脑煜阕罚ㄟ^添加一些結(jié)點(diǎn)合瓢,把他補(bǔ)成一顆完全二叉樹,那么再進(jìn)行編號(hào)透典,就可以進(jìn)行順序存儲(chǔ)了

經(jīng)過改造的一般二叉樹

數(shù)組下標(biāo) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10
-------|--------------------------------------------
數(shù)據(jù) | A | B | C | D | E | 0 | 0 | 0 | 0 | 0 | F

由此可以看出,這樣的存儲(chǔ)方式顿苇,會(huì)造成很多空間的浪費(fèi)峭咒,而且如果要進(jìn)行對(duì)樹上元素進(jìn)行刪除、插入操作需要移動(dòng)大量的數(shù)據(jù)元素纪岁,因此二叉樹不宜采用順序存儲(chǔ)結(jié)構(gòu)

二叉樹的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)

二叉樹的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)就是凑队,用類似于鏈表的存儲(chǔ)方法來存儲(chǔ)樹上元素的邏輯關(guān)系,即用指針來表示元素之間的邏輯關(guān)系


結(jié)點(diǎn)的存儲(chǔ)結(jié)構(gòu)

data是數(shù)據(jù)域幔翰,leftChild和rightChild是指針域漩氨,leftChild是
指向左兒子的指針,rightChild是指向有兒子的指針叫惊,當(dāng)左兒子或右兒子為空時(shí),相應(yīng)的指針域也為空

代碼描述

//存儲(chǔ)的數(shù)據(jù)類型
typedef char DataType
typedef struct node
{
    DataType data;              //數(shù)據(jù)域
    struct node* leftChild;     //左兒子
    struct node* rightChild;    //右兒子
}BinNode;
typedef BinNode* BinTree;

這是二叉鏈表的定義做修,除此之外還有三叉鏈表,三叉鏈表比起二叉鏈表多了一個(gè)指向雙親結(jié)點(diǎn)的指針域饰及,如圖所示

結(jié)點(diǎn)的存儲(chǔ)結(jié)構(gòu)

代碼描述

//存儲(chǔ)的數(shù)據(jù)類型
typedef char DataType
typedef struct node
{
    DataType data;              //數(shù)據(jù)域
    struct node* leftChild;     //左兒子
    struct node* rightChild;    //右兒子
    struct node* parent;        //雙親
}BinNode;
typedef BinNode* BinTree;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市燎含,隨后出現(xiàn)的幾起案子宾濒,更是在濱河造成了極大的恐慌,老刑警劉巖绘梦,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異谚咬,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)尚粘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門择卦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事秉继∑碓耄” “怎么了尚辑?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長杠茬。 經(jīng)常有香客問我,道長瓢喉,這世上最難降的妖魔是什么宁赤? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任栓票,我火速辦了婚禮,結(jié)果婚禮上走贪,老公的妹妹穿的比我還像新娘。我一直安慰自己坠狡,他們只是感情好继找,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布擦秽。 她就那樣靜靜地躺著,像睡著了一般感挥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上触幼,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音置谦,去河邊找鬼。 笑死媒峡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的谅阿。 我是一名探鬼主播酬滤,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼盯串!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起体捏,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎糯崎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沃呢,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年樟插,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了竿刁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片黄锤。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡食拜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出负甸,到底是詐尸還是另有隱情流强,我是刑警寧澤呻待,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站蚕捉,受9級(jí)特大地震影響奏篙,放射性物質(zhì)發(fā)生泄漏迫淹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一敛熬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧应民,春花似錦话原、人聲如沸夕吻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至改备,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間悬钳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來泰國打工默勾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人母剥。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像环疼,于是被迫代替她去往敵國和親习霹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子炫隶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

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