根據後序和中序遍歷輸出先序遍歷(PTA)

2021-10-12 03:19:14 字數 1233 閱讀 7691

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

輸入格式:

第一行給出正整數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: 是什麼玩意

**如下

#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;

}

模擬法,先用雜湊陣列(這裡稱為k陣列吧)記錄中序裡面每個序號出現的位置,作用後面說

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.二叉鍊錶結構的定義 ...