PAT1020 中序+后续求层次遍历
来源:互联网 发布:棍刀淘宝 编辑:程序博客网 时间:2024/06/06 01:12
题目链接
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:72 3 1 5 7 6 41 2 3 4 5 6 7Sample Output:
4 1 6 3 5 7 2
#include<bits/stdc++.h>using namespace std;int in[35];struct Node{ int w; int l, r; //左右子树节点下标,-1表示子树为空}node[35];/*递归思想,l1,l2分别代表后续和中序的起始下标,len表示本段的长度*将后序和中序序列划分为 左子树,根节点,右子树三个子段,此处根节点这段不要*后序和中序的左子树和右子树里的元素相同,但顺序可能不同*/int func(int l1, int l2, int len){ if(len < 1) return -1; else if(len == 1){ node[l1].l = node[l1].r = -1; return l1; } else{ int m = -1; //获取根节点在中序序列的位置 for(int i = l2; i < l2 + len; ++i){ if(in[i] == node[l1 + len - 1].w){ m = i; break; } } int len2 = m - l2; //新划分的左子树长度 node[l1 + len - 1].l = func(l1, l2, len2); node[l1 + len - 1].r = func(l1 + len2, m + 1, len - len2 - 1); return l1 + len - 1; }}//宽搜void BFS(int n){ queue<Node> que; int ans[35], Size = 0; que.push(node[n - 1]); //头结点如队列 while(!que.empty()){ Node t = que.front(); que.pop(); ans[Size++] = t.w; if(t.l != -1) que.push(node[t.l]); if(t.r != -1) que.push(node[t.r]); } for(int i = 0; i < Size -1; ++i) printf("%d ", ans[i]); printf("%d\n", ans[Size - 1]);}int main() { freopen("/1.txt", "r", stdin); int n; scanf("%d", &n); //将后续序列存于结构体中,中序存于in数组中 for(int i = 0; i < n; ++i) scanf("%d", &node[i].w); for(int i = 0; i < n; ++i) scanf("%d", &in[i]); func(0, 0, n); BFS(n); return 0;}
- PAT1020 中序+后续求层次遍历
- 二叉树的各种操作 先序 中序 后续 层次 遍历 求树高度 节点深度 知先序中序求后续 二叉排序树
- 从前序遍历和中序遍历求后续遍历
- 从前序遍历和中序遍历求后续遍历
- 数据结构,二叉树已知后续中序,建树,层次遍历;
- c++ 二叉树的构建 前序遍历 中序遍历 后续遍历 层次遍历
- 树-根据前序、中序遍历求后续遍历
- 根据中序遍历和后续遍历,输出树的层次遍历
- 二叉树的建立及遍历(先序遍历、中序遍历、后续遍历、层次遍历)
- 二叉树(一) 先序遍历、中序遍历、后续遍历、层次遍历的递归与非递归实现
- 由前序遍历和中序遍历求后续遍历 递归实现
- 根据先序遍历和中序遍历求后续遍历
- 根据先序遍历和中序遍历结果求后续遍历模板
- 已知二叉树前序遍历和中序遍历,求后续遍历
- 知道后续遍历和中序遍历还原二叉树并求层析遍历
- Java实现树的遍历(前序、中序、后续(递归|非递归)、层次)
- java操作二叉树:构建二叉树;前序、中序、后续、层次遍历
- 算法--根据二叉树前序和中序遍历序列,求后续遍历序列
- JDBC | 1
- vue最终结构
- 【bzoj 2194】快速傅立叶之二(FFT)
- vue项目搭建
- Velocity之动态获取Web项目根目录
- PAT1020 中序+后续求层次遍历
- MTK Android Camera 运行流程-app到底层
- vue文件结构
- 虚幻4如何通过菜单设置分辨率
- 微信支付开始涉及的一些内容
- vue路由以及组件件的传值
- 闭包
- Java基础-面向对象
- telnet模拟http请求 [转]