第一行給出正整數n(≤),是樹中結點的個數。隨後兩行,每行給出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
這題唯一的難點就是如何根據後序和中序遍歷把樹建立起來
先模擬一下 比如後序是
2 3 1 5 7 6 4 中序是1 2 3 4 5 6 7
從後序遍歷可以知道4是樹根,6是4的右孩子,然後根據中序遍歷可知1 2 3是4的左子樹,5 6 7 是右子樹 所以1是4的左孩子,這樣依次遞迴下去就可以把樹建好了;
**如下:
1 #include 2 #include 3 #include4 #include 5 #include 6 #include 7
using
namespace
std;
8 typedef long
long
ll;9
const
int maxn=1e5+5;10
int mid[50],post[50
];11
struct
node12;
17 node* build(int *mid,int *post,int
n)18
27 node *t=new
node;
28 t->data=*p;
29int len=p-mid;
30 t->lnode=build(mid,post,len);
31 t->rnode=build(p+1,post+len,n-len-1
);32
return
t;33}34
void preprint(node *t)
3542
return;43
}44intmain()
45
根據後序和中序遍歷輸出先序遍歷
本題要求根據給定的一棵二叉樹的後序遍歷和中序遍歷結果,輸出該樹的先序遍歷結果。輸入格式 第一行給出正整數nn le 30 30 是樹中結點的個數。隨後兩行,每行給出nn個整數,分別對應後序遍歷和中序遍歷結果,數字間以空格分隔。題目保證輸入正確對應一棵二叉樹。輸出格式 在一行中輸出preorder 以...
根據後序和中序遍歷輸出先序遍歷
本題要求根據給定的一棵二叉樹的後序遍歷和中序遍歷結果,輸出該樹的先序遍歷結果。第一行給出正整數n 30 是樹中結點的個數。隨後兩行,每行給出n個整數,分別對應後序遍歷和中序遍歷結果,數字間以空格分隔。題目保證輸入正確對應一棵二叉樹。在一行中輸出preorder 以及該樹的先序遍歷結果。數字間有1個空...
根據後序和中序遍歷輸出先序遍歷
n 是樹中結點的個數。隨後兩行,每行給出 n個整數,分別對應後序遍歷和中序遍歷結果,數字間以空格分隔。題目保證輸入正確對應一棵二叉樹。7 2 3 1 5 7 6 4 1 2 3 4 5 6 7preorder 4 1 3 2 6 5 7 思路 一.根據後序遍歷和中序遍歷建樹 1.二叉鍊錶結構的定義 ...