java前中后序_前序中序求后序的java算法
二叉树的前序、中序、后序遍历的定义:
前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其右子树;
中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树;
后序遍历:对任一子树,先遍历其左子树,然后遍历其右子树,最后访问根。
给定一棵二叉树的前序遍历和中序遍历,求其后序遍历(提示:给定前序遍历与中序遍历能够唯一确定后序遍历)。
变量条件:二叉树中的结点名称以大写字母表示:A,B,C....最多26个结点。
运行时限:1秒/测试数据。
输入格式:两行,第一行为前序遍历,第二行为中序遍历。
输出格式:若不能根据前序和中序遍历求出后序遍历,输出NO ANSWER;否则输出一行,为后序遍历。
/**
* 前序遍历:GDAFEMHZ
* 中序遍历:ADEFGHMZ
*
*
* 两个步骤:
根据前序中序,构造二叉树
后序遍历二叉树
* 根据前序遍历的特点得知,根结点为G
* 根结点将中序遍历结果ADEFGHMZ分成ADEF和HMZ两个左子树、右子树。
* 递归确定中序遍历序列ADEF和前序遍历序列DAFE的子树结构;
* 递归确定中序遍历序列HMZ和前序遍历序列MHZ的子树结构;
*/
public class PostOrder{
public static void main(String[] args) throws Exception{
// Scanner in = new Scanner(System.in);
// String pre,mid;
// while(in.hasNext()){
// pre = in.next();
// mid = in.next();
// System.out.println(postOrder(pre,mid));
// }
String pre = "ABDGCEFH";
String mid = "DGBAECHF";
System.out.println(postOrder(pre,mid));
}
private static String postOrder(String pre, String mid) throws Exception{
if(pre.length() == 1)
return pre;
else if(pre.length() == 0)
return "";
int m = mid.indexOf(pre.charAt(0));
return postOrder(pre.substring(1,m+1 ),mid.substring(0, m))
+ postOrder(pre.substring(m+1),mid.substring(m+1))
+ pre.charAt(0);
}
}
/**
* 中序遍历:ADEFGHMZ
* 后序遍历:AEFDHZMG
*
*
* 后序遍历最后一个结点即为根结点,即 根结点为G
*/
public class PreOrder {
public static void main(String[] args) throws Exception{
String post = "AEFDHZMG";
String mid = "ADEFGHMZ";
System.out.println(preOrder(post,mid));
}
private static String preOrder(String post, String mid) throws Exception{
if(post.length() == 1)
return post;
else if(post.length() == 0)
return "";
int m = mid.indexOf(post.charAt(post.length() - 1));
return post.charAt(post.length() - 1)
+ preOrder(post.substring(post.length() - mid.length(),m),mid.substring(0,m))
+ preOrder(post.substring(m,post.length() - 1),mid.substring(m+1));
}
}
java前中后序_前序中序求后序的java算法相关推荐
- 二叉树_前序中序后序
前序遍历:ABDECFG 中序遍历:DBEAFCG 后序遍历:DEBFGCA 层序遍历:ABCDEFG Tips:以A为 参照点,A是起始节点,它的位置在中间,我称之为中.前序就是[中左右],中序[左 ...
- 由中序和后序(前序)序列求前序(后序)序列
已知二叉树的中序和后序(前序)序列可以唯一确定一颗二叉树,例如, 中序序列:1 2 3 4 5 6 后序序列:3 4 2 6 5 1 可以唯一确定一颗二叉树,如下图: 思路是这样的: 我们知道 ...
- java类的不变约束_设计中的变与不变
古希腊哲学家巴门尼德认为:"人的思想和言语都有一个载体,如果你在这一时间和另外一个时间想到或者谈到同样一件东西,那就说明这件东西在这段时间内没有变化,如有变化的话,你说的就不是同一件东西.& ...
- java office文件加水印_永中Office与统一操作系统UOS完成适配,开辟高效智能办公新领域...
近日,永中Office办公软件完成了与统一操作系统UOS的适配工作,此次成功适配表明信息技术应用创新操作系统与办公软件兼容性能优良.运行稳定,大幅提升用户在信创计算机上的办公体验,可为政企提供安全可靠 ...
- java任务追踪预警怎么写_分布式系统中如何优雅地追踪日志(原理篇)
本文只讲原理,不讲框架. 分布式系统中日志追踪需要考虑的几个点? 需要一个全服务唯一的id,即traceId,如何保证? traceId如何在服务间传递? traceId如何在服务内部传递? trac ...
- 地壳中元素含量排名记忆口诀_地壳中元素含量_地壳中元素含量口诀
地壳中元素含量 下面有关硅的叙述中,正确的是A.光导纤维是以硅酸盐为主要原料制成的B.硅是构成矿物和岩石的主要元素,硅在地壳中的含量在所有的元素 问题补充:试题难度:困难试题类型:选择题试题内容:下面 ...
- eof在c语言中表示什么_日语中的鍵为什么既能表示“钥匙”也能表示“锁”?...
我们知道,日语中的「鍵(かぎ)」表示"钥匙"的意思,例如:(1)玄関(げんかん)の鍵をなくした.房门钥匙弄丢了.但同时还能表示"锁"的意思.例如:(2)納戸(な ...
- c# mysql代码中写事务_代码中添加事务控制 VS(数据库存储过程+事务) 保证数据的完整性与一致性...
[c#]代码库代码中使用事务前提:务必保证一个功能(或用例)在同一个打开的数据连接上,放到同一个事务里面操作. 首先是在D层添加一个类为了保存当前操作的这一个连接放到一个事务中执行,并事务执行打开同一 ...
- 操作系统中的死锁_操作系统中的死锁介绍
操作系统中的死锁 1.1究竟什么是僵局? (1.1 What exactly is a deadlock?) In a multiprogramming environment, there may ...
最新文章
- mysql 自后向前截取函数_【转载】Sqlserver使用Right函数从最右边向前截取固定长度字符串...
- 什么是 constructor signature in interface
- 杂七杂八DataTable获取Table某一列成List转换Table成List
- 常问 3: 谈谈MySQL共享锁与排他锁
- 细数嵌入式开发与通用系统开发的不同
- netbeans 添加gif图片_告别PC 用手机完成各种GIF动画编辑
- yolov5数据集标注txt2xml和xml2txt
- python发送邮件的模块_python Email 邮件发送模块
- 【转】常见问题及应用技巧---------[BIOS篇]
- SketchUp: Rendering Using Twilight SketchUp:使用暮光之城进行渲染 Lynda课程中文字幕
- android 打开闹钟,Android中的闹钟设置关闭和打开
- docker 之容器编排工具Docker Compose
- 经典书籍《征服市场的人》阅读心得
- golang sync.Map和map+mutex性能比较
- 12 如何用网格策略网住收益?——实操篇
- Python 爬虫十六式 - 第七式:正则的艺术
- requirejs技术
- 我们走访了十几家美国企业服务公司,写下了这篇万字长文
- 阿里云oss部署静态网页
- PyQT5 禁用窗口最大化,禁止调整窗口大小