二叉樹的中序後序排列求先序 先序中序排列求後序

2021-08-21 12:07:33 字數 1217 閱讀 3927

本題要求根據給定的一棵二叉樹的後序遍歷和中序遍歷結果,輸出該樹的先序遍歷結果。

第一行給出正整數n(≤30),是樹中結點的個數。隨後兩行,每行給出n個整數,分別對應後序遍歷和中序遍歷結果,數字間以空格分隔。題目保證輸入正確對應一棵二叉樹。

在一行中輸出preorder:以及該樹的先序遍歷結果。數字間有1個空格,行末不得有多餘空格。

7

2 3 1 5 7 6 4

1 2 3 4 5 6 7

preorder: 4 1 3 2 6 5 7
基本思路就是利用後序排列可以不斷找出根節點,從而在中序排列中找到該節點的位置,將中序排列拆分為左右兩個子樹成為新的中序排列,根據拆分結果可以將後序排列相同拆分為兩個新的後序排列......如此遞迴求解直到子樹為空。在這個遞迴過程中就可以不斷按順序找出各個根節點完成樹的重建! 

#include#includetypedef struct node*bt;

//根據輸入的中序後序排列來重建樹

bt createtree(int *in,int *post,int n)

int len=p-in; //計算長度

bt t=(bt)malloc(sizeof(struct node)); //建立這個節點並賦值,遞迴建立其左右孩子

t->data=*p;

t->l=createtree(in,post,len);

t->r=createtree(p+1,post+len,n-len-1); //原來長度為n,減去左邊子樹的一段和根節點,長度變為n-len-1

return t;

} void preorder(bt t)

}int main()

同理按照此思路也可以完成已知先序中序求解後序排列,只需要對重建樹的**進行更改:

bt createtree(int *in,int *pre,int n)

int len=p-in;

bt t=(bt)malloc(sizeof(struct node));

t->data=*p;

t->l=createtree(in,pre+1,len); //注意選取位置的變化

t->r=createtree(p+1,pre+1+len,n-len-1);

}

求先序排列(二叉樹已知中序和後序,求先序)

時間限制 1 sec 記憶體限制 125 mb 提交 90 解決 73 給出一棵二叉樹的中序與後序排列。求出它的先序排列。約定樹結點用不同的大寫字母表示,長度 8 每個測試檔案只包含一組測試資料,每組輸入包含兩行,第一行輸入乙個字串表示二叉樹的中序排列,第二行輸入乙個字串表示二叉樹的後序排列。對於每...

求二叉樹的先序遍歷(中序 後序 先序)

problem description 已知一棵二叉樹的中序遍歷和後序遍歷,求二叉樹的先序遍歷 input 輸入資料有多組,第一行是乙個整數t t 1000 代表有t組測試資料。每組包括兩個長度小於50 的字串,第乙個字串表示二叉樹的中序遍歷序列,第二個字串表示二叉樹的後序遍歷序列。output 輸...

中序後序,中序先序求二叉樹

用後序,中序求二叉樹 includeusing namespace std int n int a 105 b 105 mapl,r int build int la,int ra,int lb,int rb 再在中序中找到這個數的位置 if i rb return root queueq void...