題目
已知二叉樹前序?yàn)?ABDFGCEH 后序序列為 BFDGACEH ,要求輸出后序遍歷為 FGDBHECA
大體思路
又先序得出根,先序的根后為左樹一部分,我們再在中序序列里找到先序的根,此處之前即為左樹(可以畫圖好好理解下),此處之后為右樹。然后就是不斷遞歸即可。
代碼
#include
#include
#include
#define MAX 100
typedef struct Node{
char data;
struct Node *Lchild;
struct Node *Rchild;
}BiTNode,*Bitree;
void PreTree(Bitree T) //后序輸出樹
{ if(T==NULL) return;
PreTree(T-》Lchild);
PreTree(T-》Rchild);
printf(“%c”,T-》data);
}
char pre[MAX];
char mid[MAX];
int MidFind(int left,int right,char MID)
{
for(int i=left;i
{
if(mid[i]==MID) return i;
}
return 0;
}
void Create(int left,int right,int *i,BiTNode **T) //此題建立樹得先將孩子結(jié)點(diǎn)賦NULL,因?yàn)闆]有用戶輸入以確定什么時(shí)候把某個(gè)具體的結(jié)點(diǎn)賦為NULL
{//這是第一種創(chuàng)建二叉樹的寫法(二級指針法)
//這種感覺是把指針?biāo)瓦M(jìn)函數(shù)處理
*T=(Bitree)malloc(sizeof(BiTNode));
(*T)-》data=pre[*i];
(*T)-》Lchild=NULL;
(*T)-》Rchild=NULL;
(*i)++;
int midnumber = MidFind(left,right,(*T)-》data);
if(midnumber》left)
{
Create(left,midnumber-1,i,(&((*T)-》Lchild)));
}
if(midnumber
{
Create(midnumber+1,right,i,(&((*T)-》Rchild)));
}
}
BiTNode* Create2(int left,int right,int *i)
{//第二中創(chuàng)建方式(注意返回!?。。?/p>
//這種感覺是把指針讓函數(shù)處理(自己不進(jìn)去)
BiTNode *T;
T=(Bitree)malloc(sizeof(BiTNode));
T-》data=pre[*i];
T-》Lchild=NULL;
T-》Rchild=NULL;
(*i)++;
int midnumber = MidFind(left,right,T-》data);
if(midnumber》left)
{
T-》Lchild = Create2(left,midnumber-1,i);
}
if(midnumber
{
T-》Rchild = Create2(midnumber+1,right,i);
}
return T;
}
int main()
{
memset(pre,0,MAX);
memset(mid,0,MAX);
gets(pre);
gets(mid);
int left,right,len,i=0;
len=strlen(pre);
left=0;
right=len-1;
BiTNode *T=(Bitree)malloc(sizeof(BiTNode)); //這里可以不用分配空間,因?yàn)樵诤瘮?shù)里會(huì)進(jìn)行分配
Create(left,right,&i,&T);
PreTree(T);
return 0;
}
責(zé)任編輯:haq
-
C語言
+關(guān)注
關(guān)注
180文章
7630瀏覽量
140644 -
編程
+關(guān)注
關(guān)注
88文章
3685瀏覽量
94939 -
二叉樹
+關(guān)注
關(guān)注
0文章
74瀏覽量
12583
原文標(biāo)題:C語言編程:已知二叉樹前序和中序,如何求出后序遍歷?
文章出處:【微信號:xx-cyy,微信公眾號:C語言編程基礎(chǔ)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
深入理解C語言:C語言循環(huán)控制

gitee 支持的編程語言有哪些
Triton編譯器支持的編程語言
編程語言的誤區(qū)與常見問題
NPU支持的編程語言有哪些
C語言中的socket編程基礎(chǔ)
MCU編程語言和開發(fā)環(huán)境介紹
C語言與Java語言的對比
C語言與其他編程語言的比較
Orin芯片的編程語言支持
plc編程語言編程相關(guān)技巧有哪些
什么是默克爾樹(Merkle Tree)?如何計(jì)算默克爾根?

評論