SDUT 1489 已知中序後序二叉樹的先序,深度

2021-07-06 07:29:31 字數 1506 閱讀 2696

time limit: 1000ms   memory limit: 65536k  有疑問?點這裡^_^

已知一棵二叉樹的中序遍歷和後序遍歷,求二叉樹的先序遍歷

輸入資料有多組,第一行是乙個整數t (t<1000),代表有t組測試資料。每組包括兩個長度小於50 的字串,第乙個字串表示二叉樹的中序遍歷序列,第二個字串表示二叉樹的後序遍歷序列。 

輸出二叉樹的先序遍歷序列

2

dbgeafc

dgebfca

lnixu

linux

abdegcf

xnliu

gyx

#includeusing namespace std;

char s[100];

char s1[100],s2[100];

struct node

*root;

node* creat()

node * build(node* p,int l,int r,int ind) //要有返回值

}if(flag==0) //防止找到最後了

return 0;

p=creat();

p->c=s1[i];

p->lnext=build(p->lnext,l,i-1,ind-1-(r-i)); //左子樹

p->rnext=build(p->rnext,i+1,r,ind-1); //右子樹

return p;

}int front(node *p)

}int main()

}}

#include//求深度

using namespace std;

char s[100];

char s1[100],s2[100];

int max;

struct node

*root;

node* creat()

node* build(node* p,int l,int r,int ind)

}if(flag==0)

return 0;

p=creat();

p->c=s1[i];

p->lnext=build(p->lnext,l,i-1,ind-1-(r-i));

p->rnext=build(p->rnext,i+1,r,ind-1);

return p;

}int front(node *p,int ans)

}int main()

{ int t;

while(~scanf("%d",&t))

{while(t--)

{max=-1;

scanf("%s%s",s1,s2);

int len=strlen(s1);

root=creat();

root=build(root,0,len-1,len-1);

front(root,1);

cout<

SDUT 1489 求二叉樹的先序遍歷

time limit 1000ms memory limit 65536k 有疑問?點這裡 已知一棵二叉樹的中序遍歷和後序遍歷,求二叉樹的先序遍歷 輸入資料有多組,第一行是乙個整數t t 1000 代表有t組測試資料。每組包括兩個長度小於50 的字串,第乙個字串表示二叉樹的中序遍歷序列,第二個字串表...

二叉樹已知先序中序求後序 已知中序後序求先序

在做資料結構面試題的時候我們會經常發現有關二叉樹的題目總是這樣的 栗子 已知某二叉樹先序為 中序為 求後序 已知某二叉樹中序為 後序為 求先序 需要注意的是 我們只能夠通過已知先序中序求後序或已知中序後序求先序,而不能夠已知先序和後序求中序 下面總結一下兩種題的做法 首先回顧知識點 第一種 已知乙個...

二叉樹 已知先序和中序求後序,已知中序和後序求先序

樹的三種遍歷方式的遍歷順序 先序遍歷 根 左子樹 右子樹 特點 第乙個元素為根 中序遍歷 左子樹 根 右子樹 特點 根的兩邊分別為左子樹和右子樹 後序遍歷 左子樹 右子樹 根 特點 最後乙個元素為根 有如下圖的二叉樹 其先序 中序 後序遍歷分別為 dbacegf abcdefg acbfged。1 ...