pat L2 006樹的遍歷

2021-08-16 16:51:12 字數 1153 閱讀 5025

時間限制

400 ms

記憶體限制

65536 kb

**長度限制

8000 b

判題程式

standard 作者

陳越給定一棵二叉樹的後序遍歷和中序遍歷,請你輸出其層序遍歷的序列。這裡假設鍵值都是互不相等的正整數。

輸入格式:

輸入第一行給出乙個正整數n(<=30),是二叉樹中結點的個數。第二行給出其後序遍歷序列。第三行給出其中序遍歷序列。數字間以空格分隔。

輸出格式:

在一行中輸出該樹的層序遍歷的序列。數字間以1個空格分隔,行首尾不得有多餘空格。

輸入樣例:

7

2 3 1 5 7 6 4

1 2 3 4 5 6 7

輸出樣例:
4 1 6 3 5 7 2

這個題可以有好幾種解法:就本人水平,目前只會通過陣列來實現,這個方法比較浪費空間資料大了就不適用。

首先對於二叉樹要了解,前序,中序,後序,層序的概念;

1.前序:先根節點,後左子樹,最後右子樹;

2.中序:先左子樹,後根節點,最後右子樹;

3.後序:先左子樹,後右子樹,最後根節點;

使用陣列來求需要知道對於二叉樹來說:左子樹的座標是2*index+1

對於右子樹座標是2*index+2;

所以使用遞迴查詢更節點,儲存在陣列中,最後由於有一些陣列的值不是題目要求的,所以有個去0的過程。

在遞迴的過程中最重要的是判斷每次左子樹與右子樹的範圍;在這錯了好長時間;

**如下:

#include#include#include#include#includeconst int maxn=10000;

using namespace std;

int s1[maxn],s2[maxn];

int s3[maxn];

void judge(int p1,int p2,int q1,int q2,int index)

int i;

for(i=0;s1[q2]!=s2[p1+i];i++);

s3[index]=s1[q2];

//cout<>n)

cout<

PAT L2 006 樹的遍歷

給定一棵二叉樹的後序遍歷和中序遍歷,請你輸出其層序遍歷的序列。這裡假設鍵值都是互不相等的正整數。輸入樣例 72 3 1 5 7 6 4 1 2 3 4 5 6 7 輸出樣例 4 1 6 3 5 7 2 include include include includeusing namespace st...

PAT L2 006 樹的遍歷

題目 給定一棵二叉樹的後序遍歷和中序遍歷,請你輸出其層序遍歷的序列。這裡假設鍵值都是互不相等的正整數。輸入格式 輸入第一行給出乙個正整數n 30 是二叉樹中結點的個數。第二行給出其後序遍歷序列。第三行給出其中序遍歷序列。數字間以空格分隔。輸出格式 在一行中輸出該樹的層序遍歷的序列。數字間以1個空格分...

PAT L2 006 樹的遍歷

參考部落格 給定一棵二叉樹的後序遍歷和中序遍歷,請你輸出其層序遍歷的序列。這裡假設鍵值都是互不相等的正整數。輸入格式 輸入第一行給出乙個正整數n 30 是二叉樹中結點的個數。第二行給出其後序遍歷序列。第三行給出其中序遍歷序列。數字間以空格分隔。輸出格式 在一行中輸出該樹的層序遍歷的序列。數字間以1個...