数据结构实习 - problem K 用前序中序建立二叉树并以层序遍历和后序遍历输出
用前序中序建立二叉树并以层序遍历和后序遍历输出
writer:pprp
实现过程主要是通过递归,进行分解得到结果
代码如下:
#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>
using namespace std;
const int N = 1000;
struct tree
{
tree* l;
tree* r;
int data;
tree()
{
l = NULL;
r = NULL;
data = 0;
}
};
void LevelOrder(tree * root)
{
queue<tree*> q;
tree * p = root;
q.push(p);
while(!q.empty())
{
p = q.front();
q.pop();
cout << p->data << " ";
if(p->l != NULL)
q.push(p->l);
if(p->r != NULL)
q.push(p->r);
}
}
void PostOrder(tree * root)
{
if(root != NULL)
{
PostOrder(root->l);
PostOrder(root->r);
cout << root->data << " ";
}
}
tree * CreateTree(int* pre, int* in, int n)
{
tree * node = NULL;
int lpre[N], rpre[N];
int lin[N],rin[N];
memset(lin,0,sizeof(lin)),memset(rin,0,sizeof(rin)),
memset(lpre,0,sizeof(lpre)),memset(rpre,0,sizeof(rpre));
if(n == 0)
return NULL;
node = new tree;
node->data = pre[1];
int lincnt = 1, rincnt = 1;
int lprecnt = 1, rprecnt = 1;
// deal with in order
for(int i = 1; i <= n ; i++)
{
if(in[i]!=pre[1])
{
if(i <= lincnt)
lin[lincnt++] = in[i];
else
rin[rincnt++] = in[i];
}
}
lincnt--,rincnt--;
// deal with pre order
for(int i = 2; i <= n ; i++)
{
if(i < (lincnt+2))
lpre[lprecnt++] = pre[i];
else
rpre[rprecnt++] = pre[i];
}
lprecnt--,rprecnt--;
node->l = CreateTree(lpre,lin,lincnt);
node->r = CreateTree(rpre,rin,rincnt);
return node;
}
int main()
{
int n;
cin >> n;
int *pre, *in;
pre = new int[n+1];
in = new int[n+1];
for(int i = 1; i <= n ; i++)
cin >> pre[i];
for(int i = 1; i <= n ; i++)
cin >> in[i];
tree * root = CreateTree(pre,in,n);
LevelOrder(root);
cout << endl;
PostOrder(root);
return 0;
}
数据结构实习 - problem K 用前序中序建立二叉树并以层序遍历和后序遍历输出的更多相关文章
- 数据结构实习 problem L 由二叉树的中序层序重建二叉树
由二叉树的中序层序重建二叉树 writer:pprp 用层序中序来重建二叉树 代码点这里 其实本质上与前序中序建立二叉树没有什么太大区别 大概思路: 递归解法,对当前层进行处理,通过层序遍历可以得到当 ...
- python数据结构之树和二叉树(先序遍历、中序遍历和后序遍历)
python数据结构之树和二叉树(先序遍历.中序遍历和后序遍历) 树 树是\(n\)(\(n\ge 0\))个结点的有限集.在任意一棵非空树中,有且只有一个根结点. 二叉树是有限个元素的集合,该集合或 ...
- 二叉树:前序遍历、中序遍历、后序遍历,BFS,DFS
1.定义 一棵二叉树由根结点.左子树和右子树三部分组成,若规定 D.L.R 分别代表遍历根结点.遍历左子树.遍历右子树,则二叉树的遍历方式有 6 种:DLR.DRL.LDR.LRD.RDL.RLD.由 ...
- java编写二叉树以及前序遍历、中序遍历和后序遍历 .
/** * 实现二叉树的创建.前序遍历.中序遍历和后序遍历 **/ package DataStructure; /** * Copyright 2014 by Ruiqin Sun * All ri ...
- 数据结构实习 Problem H 迷宫的最短路径
数据结构实习 Problem H 迷宫的最短路径 题目描述 设计一个算法找一条从迷宫入口到出口的最短路径. 输入 迷宫的行和列m n 迷宫的布局 输出 最短路径 样例输入 6 8 0 1 1 1 0 ...
- HDU1710---树(知前序遍历与中序遍历 求后序遍历)
知前序遍历与中序遍历 求后序遍历 #include<iostream> #include<cstring> #include<queue> #include< ...
- UVA - 548 根据中序遍历和后序遍历建二叉树(关于三种遍历二叉树)
题意: 同时给两个序列,分别是二叉树的中序遍历和后序遍历,求出根节点到叶子结点路径上的权值最小和 的那个 叶子节点的值,若有多个最小权值,则输出最小叶子结点的和. 想法: 一开始想着建树,但是没有这样 ...
- 根据 中序遍历 和 后序遍历构造树(Presentation)(C++)
好不容易又到周五了,周末终于可以休息休息了.写这一篇随笔只是心血来潮,下午问了一位朋友PAT考的如何,顺便看一下他考的试题,里面有最后一道题,是关于给出中序遍历和后序遍历然后求一个层次遍历.等等,我找 ...
- javascript数据结构与算法--二叉树遍历(后序)
javascript数据结构与算法--二叉树遍历(后序) 后序遍历先访问叶子节点,从左子树到右子树,再到根节点. /* *二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 * * * */ ...
随机推荐
- 小程序 Page is not constructed because it is not found.
如下错误一般发生在点击事件切换页面的时候 解决方式: 在需要切换到的那个页面的js文件中添加Page({ })方法即可解决此问题. Tis:在js文件中输入Page回车,可自动添加Page方法,包括里 ...
- Storm-源码分析-Topology Submit-Task-TopologyContext (backtype.storm.task)
1. GeneralTopologyContext 记录了Topology的基本信息, 包含StormTopology, StormConf 已经从他们推导出的, task和component, co ...
- Theme Section---hdu4763(kmp, Next数组的运用)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4763 题意就是求s串中满足EAEBE格式的E的最大长度:我们可以枚举前缀和后缀的所有匹配(k)看是否在 ...
- python序列化和json
python 的序列化和反序列化用于内存之间的共享,包括服务器和客户端的共享,两个Python程序之间的共享,以及以字符串的形式存储到硬盘中. pyhton 的pickle 可以对Python的各种数 ...
- Spring-ApplicationContext容器
Spring ApplicationContext容器 ApplicationContext是spring中比较高级的容器.和BeanFactory类似,它可以加载配置文件中定义的bean,并将所有b ...
- 嵌入式文件系统构建工具 busybox / buildroot / openwrt
1.busybox busybox最轻量 1) 修改Makefile CROSS_COMPILE ?= /usr/local/gcc-linaro-arm-linux-gnueabihf/bin/ar ...
- 我在Xcode 6上Swift框架的测试经验分享
我耗费了两个多月时间来琢磨Swift作为一门函数是编程语言都能做些什么,而今已经转移 到使用Swift来开发库文件了. 我花了一天的时间,最后发觉之前做的Swift特性探究是相当愉快的经历,我发现仍旧 ...
- TensorFlow学习笔记(七)TesnorFlow实现计算加速
目录: 一.TensorFlow使用GPU 二.深度学习训练与并行模式 三.多GPU并行 四.分布式TensorFlow 4.1分布式TensorFlow的原理 4.2分布式TensorFlow模型训 ...
- (转)MFC中Doc,View,MainFrmae,App各指针的互相获取
App是应用域,所有的域中的东西都可以通过全局函数访问到它. MainFrame是主框架,也基本可以用全局函数访问到. MainFrame下是若干个ChildFrame,ChildFrame中若干个V ...
- appium ios 自动化测试
iOS自动化测试:Appium 从入门到实践https://www.jianshu.com/p/43f858180557appium自动化测试iOS Demohttps://www.jianshu.c ...