GPLT L2 006 樹的遍歷

2021-10-05 15:08:45 字數 1603 閱讀 4993

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

輸入格式:

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

輸出格式:

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

輸入樣例:

72 3 1 5 7 6 4

1 2 3 4 5 6 7

輸出樣例:

4 1 6 3 5 7 2

本題是考察樹的基礎知識的一題,思路:先根據後序序列和中序序列構造二叉樹,然後再利用佇列實現層次遍歷,返回結果集,最後輸出結果集即可。注意:構造二叉樹的過程是遞迴的。

//@author:hairu,wu

//@from:ahut

#include

#include

#include

using

namespace std;

const

int max_n=

100;

int n;

int last[max_n]

;int in[max_n]

;struct tree};

void

createtree

(tree*

&t,int abegin,

int aend,

int bbegin,

int bend)

int tmp=last[aend]

;int i=bbegin;

for(i=bbegin;i<=bend;i++)}

createtree

(t->lchild,abegin,abegin+

(i-bbegin-1)

,bbegin, i-1)

;//左子樹

createtree

(t->rchild,abegin+

(i-bbegin)

,aend-

1,i+

1,bend)

;//右子樹

}//先序遍歷

void

preorder

(tree *t)

//層次遍歷

vector<

int>

levelorder

(tree *t)

return ans;

}int

main()

for(

int i=

0;i) tree *tree=

null

;createtree

(tree,

0,n-1,

0,n-1)

;//建立二叉樹

//preorder(tree);

vector<

int> ans=

levelorder

(tree)

;int size=ans.

size()

;for

(int i=

0;i)return0;

}

GPLT L2 006 樹的遍歷

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

GPLT L2 006 樹的遍歷(二叉樹)

給定一棵二叉樹的後序遍歷和中序遍歷,請你輸出其層序遍歷的序列。這裡假設鍵值都是互不相等的正整數。後序遍歷序列 左子樹遍歷序列 右子樹遍歷序列 根節點。中序遍歷序列 左子樹遍歷序列 根節點 右子樹遍歷序列。找到根節點,再利用根節點計算新的後 中遍歷序列端點。注意建樹時傳根節點的引用。include u...

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...