浙大 PAT Advanced level 1020. Tree Traversals (25)
来源:互联网 发布:赢时胜软件 编辑:程序博客网 时间:2024/06/04 18:33
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 7
Sample Output:
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 7
Sample Output:
4 1 6 3 5 7 2
从中序和后序遍历恢复二叉树(类似的还有从前序和中序遍历恢复二叉树),然后进行层序遍历,都是比较经典的问题。
#include <iostream>#include <queue>using namespace std;typedef struct node{int data;struct node *lchild;struct node *rchild;}node;#define MAXLENGTH 32#if 0void preOrderTraverse(node *root){if (root){cout << root->data << ' ';preOrderTraverse(root->lchild);preOrderTraverse(root->lchild);}}void inOrderTraverse(node *root){if (root){inOrderTraverse(root->lchild);cout << root->data << ' ';inOrderTraverse(root->rchild);}}void postOrderTraverse(node *root){if (root){postOrderTraverse(root->lchild);postOrderTraverse(root->rchild);cout << root->data << ' ';}}#endif void levelOrderTraverse(node *root){queue<node *> Q;node *temp;bool flag = false;if (root){Q.push(root);while (!Q.empty()){temp = Q.front();Q.pop();if (flag){cout << ' ';}else{flag = true;}cout << temp->data;if (temp->lchild){Q.push(temp->lchild);}if (temp->rchild){Q.push(temp->rchild);}}}}bool inPostOrderRestore(int *postOrder, int *inOrder, int num, node *root){int index = 0;root->data = postOrder[num-1];while (index != num){if (inOrder[index] == postOrder[num-1]){break;}++index;}// 未找到相同项,输入数据有问题if (num == index){return false;}// 左子树不为空if (0 != index){root->lchild = new node;root->lchild->lchild = NULL;root->lchild->rchild = NULL;inPostOrderRestore(postOrder, inOrder, index, root->lchild);}// 右子树不为空if (index != num-1){root->rchild = new node;root->rchild->lchild = NULL;root->rchild->rchild = NULL;// 调整位置for (int i = index; i != num-1; ++i){inOrder[i] = inOrder[i+1];}inPostOrderRestore(postOrder+index, inOrder+index, num-index-1, root->rchild);}return true;}int main(){int num;node *root;int postOrder[MAXLENGTH];int inOrder[MAXLENGTH];cin >> num;root = new node;root->lchild = NULL;root->rchild = NULL;for (int i = 0; i != num; ++i){cin >> postOrder[i];}for (int i = 0; i != num; ++i){cin >> inOrder[i];}inPostOrderRestore(postOrder, inOrder, num, root);levelOrderTraverse(root);cout << endl;system("pause");return 0;}
0 0
- 浙大 PAT Advanced level 1020. Tree Traversals (25)
- 浙大PAT (Advanced Level) Practise 1020Tree Traversals (25)
- 【PAT Advanced Level】1020. Tree Traversals (25)
- PAT (Advanced Level) 1020. Tree Traversals (25)
- 【PAT】【Advanced Level】1020. Tree Traversals (25)
- 1020. Tree Traversals (25) @ PAT (Advanced Level) Practise
- PAT Advanced Level 1020. Tree Traversals (25)(Java 实现)
- PAT (Advanced Level) Practise 1020. Tree Traversals (25)
- 1020. Tree Traversals (25)——PAT (Advanced Level) Practise
- PAT (Advanced Level) Practise 1020. Tree Traversals (25)
- 浙大 PAT 1020. Tree Traversals (25)
- 浙大PAT 1020. Tree Traversals (25)
- 浙大PAT 1020. Tree Traversals (25)
- PAT (Advanced Level) Practise 1020 Tree Traversals (25)
- PAT (Advanced Level) Practise 1086 Tree Traversals Again (25)
- PAT (Advanced Level) Practise 1086 Tree Traversals Again (25)
- PAT (Advanced Level) Practise 1020 Tree Traversals (25)
- 【PAT】【Advanced Level】1086. Tree Traversals Again (25)
- markdown和 html相比有什么区别
- SparseArray代替HashMap
- python的socket编程之udp编程
- 【BZOJ2875】[Noi2012]随机数生成器【矩阵快速幂】
- c++语法——类和对象的学习(1)
- 浙大 PAT Advanced level 1020. Tree Traversals (25)
- ThreadLocal源码分析
- python中操作数据库中游标的使用方法
- 2016年武汉科技大学邀请赛网络赛 J题
- 动态规划 中级题解 路径记录
- UITextField限制输入字数高亮状态下输入框内真实类容与textFiled(解决中文输入问题)
- 用fiddler模拟网络请求超时
- Android-Activity生命周期的理解
- android WebView拦截js弹窗界面无响应问题