【天梯赛】L2-006 树的遍历 (25分)(层序遍历)
题目描述 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。
输入格式: 输入第一行给出一个正整数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
#include <iostream> #include <queue> using namespace std; int post[31], in[31]; typedef struct bitnode{ int data; struct bitnode *lchild, *rchild; }BiTNode, *BiTree; BiTree buildTree(int root, int start, int end){ if(start > end) return NULL; BiTree p = (BiTNode*)malloc(sizeof(BiTNode)); p->data = post[root]; int i; for(i = start; i < end; i++){ if(in[i] == post[root]) break; } p->lchild = buildTree(root-1-(end-i), start, i-1); p->rchild = buildTree(root-1, i+1, end); return p; } queue<BiTree> q; void Levelorder(BiTree bt){ q.push(bt); int num = 0; while(!q.empty()){ BiTree tmp = q.front(); if(num > 0) cout << " "; cout << tmp->data; if(tmp->lchild) q.push(tmp->lchild); if(tmp->rchild) q.push(tmp->rchild); q.pop(); num++; } } int main() { int n; cin >> n; for(int i = 0; i < n; i++){ cin >> post[i]; } for(int i = 0; i < n; i++){ cin >> in[i]; } BiTree bt = buildTree(n-1, 0, n-1); Levelorder(bt); }