給定一棵二叉樹的後序遍歷和中序遍歷,請你輸出其層序遍歷的序列。這裡假設鍵值都是互不相等的正整數。
輸入格式:
輸入第一行給出乙個正整數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...