本題要求根據給定的一棵二叉樹的後序遍歷和中序遍歷結果,輸出該樹的先序遍歷結果。
輸入格式:
第一行給出正整數n(≤30),是樹中結點的個數。隨後兩行,每行給出n個整數,分別對應後序遍歷和中序遍歷結果,數字間以空格分隔。題目保證輸入正確對應一棵二叉樹。
輸出格式:
在一行中輸出preorder: 以及該樹的先序遍歷結果。數字間有1個空格,行末不得有多餘空格。
輸入樣例:
72 3 1 5 7 6 4
1 2 3 4 5 6 7
輸出樣例:
preorder: 4 1 3 2 6 5 7
吐槽一下輸出preorder: 是什麼玩意
**如下
模擬法,先用雜湊陣列(這裡稱為k陣列吧)記錄中序裡面每個序號出現的位置,作用後面說#include
using
namespace std;
int p[30+
5];int q[30+
5];int hash_temp[30+
5];int k,num[30+
5];int temp;
void
fun(
int lenth,
int top_p,
int top_q)
intmain()
for(
int i =
0; i < len; i++
)fun
(len,0,
0); cout<<
"preorder: "
;for
(int i =
0; i < len -
1; i++
) cout<
;return0;
}
2 3 1 5 7 6 4
1 2 3 4 5 6 7
這裡後序最後乙個是根節點(這個對每個遞迴都有效,是理解上面**的重點)
然後我們發現他是4,那麼中序裡面的』4』的左邊就是他的左子樹,右邊是右子樹,這就是k陣列的作用,能讓我們知道他在第幾個位置,在該位置前面的全是左子樹,右邊全是右子樹,當乙個點的左右子樹為空時,即lenth<0就返回遍歷完畢。lenth的計算大家可以自己去模擬一下,算出左子樹節點個數就可以直接算出右子樹元素個數了,參照**,top分別為p,q陣列的首元素
根據後序和中序遍歷輸出先序遍歷
本題要求根據給定的一棵二叉樹的後序遍歷和中序遍歷結果,輸出該樹的先序遍歷結果。輸入格式 第一行給出正整數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.二叉鍊錶結構的定義 ...