先序和中序構(gòu)造二叉樹(C語言描述)

1.問題描述:

? ? 1 .由已經(jīng)給出的二叉樹的先序(后序)和中序遍歷的結(jié)果構(gòu)造二叉樹。遍歷的結(jié)果以數(shù)組的方 ? 式輸入勒极。

? ? ?2.給定任意一棵二叉樹是掰,使用隊(duì)列作為輔助儲(chǔ)存,按樹的結(jié)點(diǎn)的深度辱匿,從根開始依次訪問所有結(jié)點(diǎn).

設(shè)計(jì)用例:


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 先序:abdecfg ? ? ? ? ? ? ? ? ? ? ? ? ? 中序:dbeafcg

設(shè)計(jì)代碼:

#defineLEN20

typedefcharElementtype;

typedefstructTreeNode*T;

typedefstructTreeNode*Position;

typedefstructQueueRecord*Queue;

structTreeNode

{

Elementtypedata;

Positionlchild;

Positionrchild;

};

structQueueRecord

{

intCapacity;

intFront;

intRear;

intSize;

PositionnodeArr[LEN];

};



intmain() {

voidinput (char*preArr,char*midArr);

voidbuildTree(Tt,char*preArr,char*midArr,intlength);

PositioncreateNode();

voidinitQueue(QueueQ);

voidoutputQueue(QueueQ);

charpreArr[LEN],midArr[LEN];

Ttree = createNode();

Queuequeue = (Queue)malloc(sizeof(structQueueRecord));

voidtree_to_queue(Tt,QueueQ);

input(preArr, midArr);

buildTree(tree, preArr, midArr,strlen(preArr));

initQueue(queue);

tree_to_queue(tree,queue);

outputQueue(queue);

getchar(); getchar();

return;

}




voidinput(charpreArr[],charmidArr[]) {

scanf_s("%s",preArr);

scanf_s("%s",midArr);

}




voidbuildTree(Tt,char*preArr,char*midArr,intlength)//t需要有明確的指向

{

intindexOf(char*arr,charx);

PositioncreateNode();

if(0 == strlen(preArr) || 0 == strlen(midArr))

{

t=NULL;

return;

}

Ttree =t;

tree->data =preArr[0];

intindex =

indexOf(midArr,preArr[0]);

intl_length =index;

intr_length =length- 1 - index;

if(l_length >0)

{

tree->lchild = createNode();

buildTree(tree->lchild,preArr+ 1,midArr, l_length);//midArr只是用了一部分;

}

else{

tree->lchild =NULL;

}

tree =t;

if(r_length >0)

{

tree->rchild = createNode();

buildTree(tree->rchild,preArr+ l_length+1,midArr+ 1 + l_length, r_length);

}

else{

tree->rchild =NULL;

}

tree =t;

}

voidpre_travel(Tt)

{

if(t==NULL) {

return;

}

else{

printf("%c",t->data);

pre_travel(t->lchild);

pre_travel(t->rchild);

}

}

voidmid_travel(Tt) {

if(t==NULL) {

return;

}

else{

mid_travel(t->lchild);

printf("%c",t->data);

mid_travel(t->rchild);

}

}

voidtree_to_queue(Tt,QueueQ)

{

intenterQueue(QueueQ,Positionp);

intl_index,r_index;

l_index = 1;

r_index = 1;

intf=enterQueue(Q,t);

while(l_index <=r_index)

{

if(enterQueue(Q, (Q->nodeArr[l_index])->lchild))

{

r_index++;

}

if(enterQueue(Q, (Q->nodeArr[l_index])->rchild))

{

r_index++;

}

l_index++;

}

}

PositioncreateNode()

{

return(Position)malloc(sizeof(structTreeNode));

}

intindexOf(char*arr,charx)

{

intindex = -1;

for(inti = 0; i < strlen(arr); i++)

{

if(x==arr[i])

{

index = i;

break;

}

}

returnindex;

}

voidinitQueue(QueueQ) {

Q->Capacity =50;

Q->Size = 0;

Q->Front = 1;

Q->Rear = 0;//從索引1開始存儲(chǔ)

}

intenterQueue(QueueQ,Positionp)

{

if(NULL==p) {

return0;

}

else{

Q->Size++;

Q->Rear++;

Q->nodeArr[Q->Rear] =p;

return1;

}

}

voidoutputQueue(QueueQ)

{

for(inti = 1; i <=Q->Size; i++)

{

printf("%c", (Q->nodeArr[i])->data);

}

}

樹的結(jié)構(gòu):

隊(duì)列結(jié)構(gòu):



? ? ? ?小節(jié):有先序(后序)+中序键痛,但是先序+后序不能確定一棵樹

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市匾七,隨后出現(xiàn)的幾起案子絮短,更是在濱河造成了極大的恐慌,老刑警劉巖昨忆,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件戚丸,死亡現(xiàn)場離奇詭異,居然都是意外死亡扔嵌,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門夺颤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來痢缎,“玉大人,你說我怎么就攤上這事世澜《揽酰” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵寥裂,是天一觀的道長嵌洼。 經(jīng)常有香客問我,道長封恰,這世上最難降的妖魔是什么麻养? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮诺舔,結(jié)果婚禮上鳖昌,老公的妹妹穿的比我還像新娘。我一直安慰自己低飒,他們只是感情好许昨,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著褥赊,像睡著了一般糕档。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拌喉,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天速那,我揣著相機(jī)與錄音俐银,去河邊找鬼。 笑死琅坡,一個(gè)胖子當(dāng)著我的面吹牛悉患,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播榆俺,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼售躁,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了茴晋?” 一聲冷哼從身側(cè)響起陪捷,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎诺擅,沒想到半個(gè)月后市袖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡烁涌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年苍碟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片撮执。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡微峰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出抒钱,到底是詐尸還是另有隱情蜓肆,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布谋币,位于F島的核電站仗扬,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蕾额。R本人自食惡果不足惜早芭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望诅蝶。 院中可真熱鬧逼友,春花似錦、人聲如沸秤涩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽筐眷。三九已至黎烈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背照棋。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國打工资溃, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人烈炭。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓溶锭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親符隙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子趴捅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

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

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,737評(píng)論 0 33
  • 計(jì)算機(jī)二級(jí)C語言上機(jī)題庫(南開版) 1.m個(gè)人的成績存放在score數(shù)組中霹疫,請(qǐng)編寫函數(shù)fun,它的功能是:將低于平...
    MrSunbeam閱讀 6,331評(píng)論 1 42
  • 教程一:視頻截圖(Tutorial 01: Making Screencaps) 首先我們需要了解視頻文件的一些基...
    90后的思維閱讀 4,676評(píng)論 0 3
  • 1. 數(shù)據(jù)結(jié)構(gòu)和算法 1.1 分解記錄 1.2 找到最大或最小的N個(gè)元素 這里可以接受一個(gè)參數(shù)key拱绑。 1.3 實(shí)...
    plutoese閱讀 1,104評(píng)論 0 48
  • 有風(fēng)吹過。 他在風(fēng)中上下翻飛丽蝎,像紙鳶一樣猎拨。 他聽見小孩子的聲音。 “我們?nèi)シ偶堷S吧屠阻『焓。” “好啊,那我放国觉,你可要把線...
    余霜仁閱讀 420評(píng)論 0 3