1020. Tree Traversals (25)
Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and inorder traversal sequences, you are supposed to output the level order traversal sequence of the corresponding binary tree.
Input Specification:
Each input file contains one test case. For each case, the first line gives a positive integer N (<=30), the total number of nodes in the binary tree. The second line gives the postorder sequence and the third line gives the inorder sequence. All the numbers in a line are separated by a space.
Output Specification:
For each test case, print in one line the level order traversal sequence of the corresponding binary tree. All the numbers in a line must be separated by exactly one space, and there must be no extra space at the end of the line.
Sample Input:7 2 3 1 5 7 6 4 1 2 3 4 5 6 7Sample Output:
4 1 6 3 5 7 2
提交代码
原题链接:https://www.patest.cn/contests/pat-a-practise/1020
题意:给你一个二叉树的后序和中序遍历的序列,输出前序遍历的序列.
二叉树遍历第一题,当做模板留个纪念吧...
AC代码:
#include <cstdio>
#include <cstdlib>
#include <queue>
#include <iostream>
using namespace std;
const int maxx = 32;
typedef struct Tree
{
Tree *le;
Tree *ri;
int data;
} Tree;
Tree *root;
int pos[maxx],in[maxx];
void printLevelOrder(Tree *root)
{
queue<Tree *> que;
Tree *tr = NULL;
que.push(root);
bool flg = true;
while(!que.empty())
{
tr = (Tree *)que.front();
que.pop();
if(tr==NULL)continue;
if(flg)
{
printf("%d",tr->data);
flg = false;
}
else
{
printf(" %d",tr->data);
}
que.push(tr->le);
que.push(tr->ri);
}
printf("\n");
}
//构造树pl为后序序列的左边界pr为其右边界
//il为中续遍历的左边界ir为其右边界
//0,n-1,0,n-1
Tree *buildTree(int pl,int pr,int il,int ir)
{
cout<<pl<<","<<pr<<","<<il<<","<<ir<<endl;
if(pl>pr)return NULL;
int p = il;
while(in[p]!=pos[pr])++p;
//Tree *tree = (Tree *)malloc(sizeof(Tree));
Tree* tree = new Tree();
tree->data = pos[pr];
tree->le = buildTree(pl,pr-ir+p-1,il,p-1);
tree->ri = buildTree(pr-ir+p,pr-1,p+1,ir);
return tree;
}
int main()
{
int n,i;
Tree *root;
scanf("%d",&n);
for(i=0; i<n; ++i)
{
scanf("%d",&pos[i]);
}
for(i=0; i<n; ++i)
{
scanf("%d",&in[i]);
}
root=buildTree(0,n-1,0,n-1);
printLevelOrder(root);
return 0;
}
/**
https://www.cnblogs.com/Hali-yang/archive/2012/08/28/2660091.html
http://blog.csdn.net/iaccepted/article/details/20473661
http://blog.csdn.net/iaccepted/article/details/20539395
*/
https://www.cnblogs.com/Hali-yang/archive/2012/08/28/2660091.html
http://blog.csdn.net/iaccepted/article/details/20473661