博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
L2-006. 树的遍历
阅读量:6324 次
发布时间:2019-06-22

本文共 1395 字,大约阅读时间需要 4 分钟。

给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。

输入格式:

输入第一行给出一个正整数N(<=30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。

输出格式:

在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。

输入样例:

72 3 1 5 7 6 41 2 3 4 5 6 7

输出样例:

4 1 6 3 5 7 2
#include
#include
#include
#include
#include
#include
using namespace std;const int N = 50 + 5;struct node{ int key, lchild, rchild; node(){ lchild = rchild = 0; }}Node[N];vector
post, in;int n, key, st;void DFS(int &root, int ls, int lt, int is, int it){ if(root == 0) root = ++st; int p = post[lt]; Node[root].key = p; int pos = is; while(in[pos] != p) pos++; if(pos != is){ DFS(Node[root].lchild, ls, ls + pos - is - 1, is, pos - 1); } if(pos != it){ DFS(Node[root].rchild, ls + pos - is, lt - 1, pos + 1, it); }}void BFS(int root){ int cnt = 0; queue
Q; Q.push(root); while(!Q.empty()){ int tmp = Q.front(); Q.pop(); printf("%d%c", Node[tmp].key, ++cnt == n?'\n':' '); if(Node[tmp].lchild){ Q.push(Node[tmp].lchild); } if(Node[tmp].rchild){ Q.push(Node[tmp].rchild); } }}int main(){ scanf("%d", &n); for(int i = 0; i < n; i++){ scanf("%d", &key); post.push_back(key); } for(int i = 0; i < n; i++){ scanf("%d", &key); in.push_back(key); } int root = 0; st = 0; DFS(root, 0, n-1, 0, n-1); BFS(root);}

 

转载于:https://www.cnblogs.com/Pretty9/p/8623828.html

你可能感兴趣的文章
普通用户不能使用sudo命令的解决办法
查看>>
bigData Ecosystem Unscramble
查看>>
Android数据存储_数据存储的几种方式
查看>>
codelite配置信息
查看>>
Happy Matt Friends(DP)
查看>>
Excel 출력
查看>>
ios 中 吊起小键盘后页面留白问题
查看>>
wamp apache 设置多端口
查看>>
Lr11之web services协议脚本开发
查看>>
feign 发送请求时,传多个参数时的写法
查看>>
CDR中怎么设置UI界面缩放级别
查看>>
第七届蓝桥杯第四题:快速排序
查看>>
php &引用符的注意情况
查看>>
Gitbush笔记
查看>>
后缀自动机学习笔记
查看>>
爬虫要违法了吗?小编告诉大家:守住规则,大胆去爬
查看>>
在 Web 页面中使用离线地图
查看>>
搭建 Docker-Registry 私有仓库
查看>>
jquery选择器
查看>>
如何提高编程能力
查看>>