數(shù)據(jù)結(jié)構(gòu)第11講 二叉樹及其創(chuàng)建

數(shù)據(jù)結(jié)構(gòu)第11講 二叉樹及其創(chuàng)建

二叉樹(Binary Tree)是nn≥0)個結(jié)點所構(gòu)成的集合片迅,它或為空樹(n=?0);或為非空樹渣窜,對于非空樹T

(1)有且僅有一個稱之為根的結(jié)點铺根;

(2)除根結(jié)點以外的其余結(jié)點分為兩個互不相交的子集T1和T2宪躯,分別稱為T的左子樹和右子樹乔宿,且T1和T2本身又都是二叉樹。

也就是說访雪,二叉樹最多有兩個"叉"详瑞,即最多有兩個子樹掂林。如圖1所示:

二叉樹一般采用鏈?zhǔn)酱鎯Ψ绞剑好總€結(jié)點包含兩個指針域,指向兩個孩子結(jié)點坝橡,還包含一個數(shù)據(jù)域泻帮,存儲結(jié)點信息。如圖2所示计寇。

結(jié)點結(jié)構(gòu)體的定義:

那么圖1中的二叉樹就可以存儲為二叉鏈表的形式锣杂,如圖3所示:

如何創(chuàng)建一棵二叉樹呢?

我們從二叉樹的定義就可以看出番宁,它是遞歸的方式定義的(除了根之外元莫,左/右子樹也是一棵二叉樹),因此也可以用遞歸程序來創(chuàng)建二叉樹蝶押。

(1)輸入結(jié)點信息踱蠢,創(chuàng)建一個結(jié)點T;

(2)詢問是否創(chuàng)建T的左子樹棋电,如果是茎截,則創(chuàng)建其左子樹,否則其左子樹為NULL赶盔;

(3)詢問是否創(chuàng)建T的右子樹企锌,如果是,則創(chuàng)建其右子樹于未,否則其右子樹為NULL霎俩。

下面展示圖1二叉樹的創(chuàng)建過程:

請輸入結(jié)點信息:

A

是否添加A的左孩子? (Y/N)

Y

請輸入結(jié)點信息:

B

是否添加B的左孩子? (Y/N)

Y

請輸入結(jié)點信息:

D

是否添加D的左孩子? (Y/N)

N

是否添加D的右孩子? (Y/N)

N

是否添加B的右孩子? (Y/N)

Y

請輸入結(jié)點信息:

E

是否添加E的左孩子? (Y/N)

N

是否添加E的右孩子? (Y/N)

N

是否添加A的右孩子? (Y/N)

Y

請輸入結(jié)點信息:

C

是否添加C的左孩子? (Y/N)

Y

請輸入結(jié)點信息:

F

是否添加F的左孩子? (Y/N)

N

是否添加F的右孩子? (Y/N)

Y

請輸入結(jié)點信息:

G

輸入后F的左孩子為空,右孩子創(chuàng)建了一個結(jié)點G如圖12所示沉眶。

是否添加G的左孩子? (Y/N)

N

是否添加G的右孩子? (Y/N)

N

輸入后G左右孩子均為空如圖13所示打却。

是否添加C的右孩子? (Y/N)

N

輸入后G左右孩子均為空如圖14所示。

#include<iostream>

using namespace std;

typedef struct Bnode/*定義二叉樹存儲結(jié)構(gòu)*/

{ char data;

? ?struct Bnode*lchild,*rchild;

}Bnode,*Btree;

void createtree(Btree &T)/*創(chuàng)建二叉樹函數(shù)*/

{

? ? char check;/*判斷是否創(chuàng)建左右孩子*/

? ? T=new Bnode;

? ? cout<<"請輸入結(jié)點信息:"<<endl;

????cin>>T->data;

????cout<<"是否添加"<data<<"的左孩子? (Y/N)"<<endl;

????cin>>check;

????if(check=='Y')

????????createtree(T->lchild);

????else

????????T->lchild=NULL;

????cout<<"是否添加"<data<<"的右孩子? (Y/N)"<<endl;

????cin>>check;

????if(check=='Y')

????????createtree(T->rchild);

????else

????????T->rchild=NULL;

????return;

}

int main()

{

????Btree mytree;

????createtree(mytree);/*創(chuàng)建二叉樹*/

????return 0;

}

本文來自本人博客:http://blog.csdn.net/rainchxy

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谎倔,一起剝皮案震驚了整個濱河市柳击,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌片习,老刑警劉巖捌肴,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異藕咏,居然都是意外死亡状知,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門孽查,熙熙樓的掌柜王于貴愁眉苦臉地迎上來饥悴,“玉大人,你說我怎么就攤上這事∥魃瑁” “怎么了瓣铣?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長贷揽。 經(jīng)常有香客問我棠笑,道長,這世上最難降的妖魔是什么禽绪? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任蓖救,我火速辦了婚禮,結(jié)果婚禮上印屁,老公的妹妹穿的比我還像新娘藻糖。我一直安慰自己,他們只是感情好库车,可當(dāng)我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布巨柒。 她就那樣靜靜地躺著,像睡著了一般柠衍。 火紅的嫁衣襯著肌膚如雪洋满。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天珍坊,我揣著相機與錄音牺勾,去河邊找鬼。 笑死阵漏,一個胖子當(dāng)著我的面吹牛驻民,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播履怯,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼回还,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了叹洲?” 一聲冷哼從身側(cè)響起柠硕,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎运提,沒想到半個月后蝗柔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡民泵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年癣丧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片栈妆。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡胁编,死狀恐怖厢钧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情掏呼,我是刑警寧澤坏快,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布铅檩,位于F島的核電站憎夷,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏昧旨。R本人自食惡果不足惜拾给,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望兔沃。 院中可真熱鬧蒋得,春花似錦、人聲如沸乒疏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽怕吴。三九已至窍侧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間转绷,已是汗流浹背伟件。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留议经,地道東北人斧账。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像煞肾,于是被迫代替她去往敵國和親咧织。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,901評論 2 355

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