二叉树遍历,先序序列+中序序列=后序序列,Poj(2255)
这里我参考了JHF大神的写法啦,直接把输出写在了建树的过程中了。
思路:
先根据先序序列找到根节点,在找该节点在中序序列中的位置,这样,左右子树有分开了。
这里的细节值得注意一下,不然很容易建树出错。(要减去inl,inl之前的已经成为别的子树的一部分了)
左树:make(prel+1,prel+1+pos-inl,inl,pos);
右树:make(prel+1+pos-inl,prer,pos+1,inr);
#include <stdio.h>
#include <string.h>
#include <algorithm> using namespace std; const int maxn = ; char pre[maxn],in[maxn],post[maxn];
int len; ///找根节点在中序中的位置
int find(int l,int r,char ch)
{
for(int i=l;i<r;i++)
if(in[i] == ch)
return i;
return -;
} ///当前树在先序序列中的左端点,右端点,
///中序中的左端点,右端点
void make(int prel,int prer,int inl,int inr)
{
if(prel>=prer)
return ;
if(prel==prer-)
{
printf("%c",pre[prel]);
return ;
} int pos = find(inl,inr,pre[prel]); make(prel+,prel+pos-inl+,inl,pos);
make(prel+pos-inl+,prer,pos+,inr);
printf("%c",pre[prel]);
} int main()
{
while(scanf("%s%s",pre,in)!=EOF)
{
len=strlen(pre);
make(,len,,len);
printf("\n");
}
return ;
}
二叉树遍历,先序序列+中序序列=后序序列,Poj(2255)的更多相关文章
- HLG2040二叉树遍历已知前中,求后
二叉树的遍历 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 60(34 users) Total Accepted: 34(30 us ...
- 二叉树遍历(前序、中序、后序)-Java实现
一.前序遍历 访问顺序:先根节点,再左子树,最后右子树:上图的访问结果为:GDAFEMHZ. 1)递归实现 public void preOrderTraverse1(TreeNode root) { ...
- PAT 甲级 1086 Tree Traversals Again (25分)(先序中序链表建树,求后序)***重点复习
1086 Tree Traversals Again (25分) An inorder binary tree traversal can be implemented in a non-recu ...
- A1135 | 红黑树判断:审题、根据“先序遍历”和“BST树”的条件生成后序遍历、递归判断
对A1135这题有心里阴影了,今天终于拿下AC.学习自柳神博客:https://www.liuchuo.net/archives/4099 首先读题很关键: There is a kind of ba ...
- lintcode 66.67.68 二叉树遍历(前序、中序、后序)
AC代码: /** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode le ...
- 遍历std::list过程中删除元素后继续遍历过程
std::list::erase Erase elements Removes from the list container either a single element (position) o ...
- [javaSE] 数据结构(二叉树-遍历与查找)
前序遍历:中,左,右 中序遍历:左,中,右 后序遍历:左,右,中 二叉树查找 从根节点进行比较,目标比根节点小,指针移动到左边 从根节点进行比较,目标比根节点大,指针移动到右边 /** * 前序遍历 ...
- 【2】【leetcode-105,106】 从前序与中序遍历序列构造二叉树,从中序与后序遍历序列构造二叉树
105. 从前序与中序遍历序列构造二叉树 (没思路,典型记住思路好做) 根据一棵树的前序遍历与中序遍历构造二叉树. 注意:你可以假设树中没有重复的元素. 例如,给出 前序遍历 preorder = [ ...
- leetcode 105 106 从前序与中序遍历序列构造二叉树 从中序与后序遍历序列构造二叉树
题目: 105 根据一棵树的前序遍历与中序遍历构造二叉树. 注意:你可以假设树中没有重复的元素. 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = ...
- LeetCode(106):从中序与后序遍历序列构造二叉树
Medium! 题目描述: 根据一棵树的中序遍历与后序遍历构造二叉树. 注意:你可以假设树中没有重复的元素. 例如,给出 中序遍历 inorder = [9,3,15,20,7] 后序遍历 posto ...
随机推荐
- STL之 sort排序与检索(2019.1.18)
1.作用对象:数组 a[n] 头文件:#include<algorithm> 内容:sort(a,a+n) 功能:进行升序排序 内容:lower_bound(a,a+n,x) 功能:找到 ...
- UVA - 213解题报告
题目链接:https://cn.vjudge.net/problem/UVA-213 Sample input TNM AEIOU 0010101100011 1010001001110110011 ...
- 1.2 rust cargo
cargo是rust的编译与打包工具,可将rust打包成为一个可执行性文件.生成的可执行性文件不能跨系统的大版本,比如在linux7上打包,那么程序无法在linux6上执行. # cargo new ...
- Eclipse + Git + 码云
1. 进入码云个人首页 点击自己的名称即可 2. 添加一个项目 3. 在Eclipse中创建一个本地Git Eclipse不建议git目录创建在项目的目录下,因此另选一个目录作为本地Git目录 选择一 ...
- win安装wordcloud报错解决方案
可以知道需要安装的是32位系统上的python 3.6.5版本的 ②登陆 https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud 网址找到相应文件 ...
- VUE验证器哪家强? VeeValidate absolutely!
VUE验证器哪家强? VeeValidate absolutely! vee-validate表单验证用法 github地址:https://github.com/baianat/vee-valida ...
- ColorCtr控制颜色渐变
ColorCtr控制颜色渐变 public class ColorCtr : MonoBehaviour { public static global_color Instance; ...
- (转)vim(vi)常用操作及记忆方法
vim(vi)常用操作及记忆方法 原文:https://www.cnblogs.com/doseoer/p/6241443.html vi(vim)可以说是linux中用得最多的工具了,不管你配置服务 ...
- (转)mkpasswd 的使用
原文:http://blog.csdn.net/u010339879/article/details/69788032 这个命令是随机生成 密码的一个工具, 如果没有这个命令,请安装相应的包. yum ...
- JavaScript控制流及关键字与C语言之比较
学习JavaScript控制流及关键字概念前,对有过C语言学习经验的同学来说,那么关键字,控制语句概念并不陌生.我们先来看看C语言吧: C语言的32个关键字和9种控制语句 9种控制语句: if.if- ...