【编程之美】java二进制实现重建
package com.cn.binarytree.utils;/*** @author 刘利娟 liulijuan132@gmail.com* @version 创建时间:2014年7月20日 下午2:03:30 类说明:*/
class Node {Node left;Node right;char chValue;Node(char chValue) {left = null;right = null;this.chValue = chValue;}
}public class Rebuild {public static final int TREELEN = 6; // 树的节点数void rebuild(char[] preOrder, char[] inOrder, int treeLen, Node root) {if (preOrder == null || inOrder == null) { // 前序遍历序列或中序遍历序列为空return;}Node temp = new Node(preOrder[0]);// 获取前序遍历序列的第一个节点System.out.println("当前节点:" + preOrder[0]);if (root == null) { // 假设根节点为空,则把当前节点复制给根节点root = temp;}if (treeLen == 1) {return;}int i = 0;while (i < inOrder.length) { // 在inOrder中找到与preOrder[0]相等的节点if (preOrder[0] != inOrder[i]) {i++;} else {break;}}int leftLen = i;System.out.println("左子树长度:" + leftLen);int rightLen = inOrder.length - leftLen - 1;System.out.println("右子树长度:" + rightLen);if (leftLen > 0) {for (int j = 0; j < preOrder.length - 1; j++) {preOrder[j] = preOrder[j + 1];}char[] leftOrder = new char[leftLen];System.out.print("左子树:");for (int j = 0; j < leftLen; j++) {leftOrder[j] = inOrder[j];System.out.print(leftOrder[j] + "\t");}System.out.println();rebuild(preOrder, leftOrder, leftLen, root.left);}if (rightLen > 0) {for (int j = 0; j < preOrder.length - 1; j++) {preOrder[j] = preOrder[j + 1];}char[] rightOrder = new char[rightLen];System.out.print("右子树:");for (int j = 0; j < rightLen; j++) {rightOrder[j] = inOrder[j + leftLen + 1];System.out.print(rightOrder[j] + "\t");}System.out.println();rebuild(preOrder, rightOrder, rightLen, root.right);}}public static void main(String[] args) {char[] pre = { 'a', 'b', 'd', 'c', 'e', 'f' };char[] in = { 'd', 'b', 'a', 'e', 'c', 'f' };new Rebuild().rebuild(pre, in, TREELEN, null);}}
java实现重建二叉树:二叉树遍历序列和序列定序遍历,二进制重建。
版权声明:本文博客原创文章,博客,未经同意,不得转载。
【编程之美】java二进制实现重建相关推荐
- 《编程之美》读书笔记19: 3.9 重建二叉树
<编程之美>读书笔记19: 3.9 重建二叉树 对根节点a以及先序遍历次序P和中序遍历次序I,查找a在I中的位置,将I分为两部分,左边部分的元素都在a的左子树上,右边的元素都在a的右子树上 ...
- java并发编程之美-阅读记录1
1.1什么是线程? 在理解线程之前先要明白什么是进程,因为线程是进程中的一个实体.(线程是不会独立存在的) 进程:是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,线程则是进程中的 ...
- java怎么打印进制,java编程思维_007打印二进制,八进制,十六进制
java编程思想_007打印二进制,八进制,十六进制 package wzs.test2; //打印二进制,八进制,十六进制 public class Test { public static voi ...
- 编程之美二进制一的个数
编程之美关于求一个整数二进制数一的个数后面的一道思考题. 1.A和B两个数,将A变成B,所需要改变的数字个数(二进制数). 异或求出异或值二进制包含的1的个数. #include <stdio. ...
- 编程之美 烙饼问题 java实现(检测状态是否出现过)
import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; /** ...
- 《Java并发编程之美》
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yAwEsYPZ-1661534116043)(img/\1625573175405.jpg)] [外链图片转存失败,源站 ...
- 《Java并发编程之美》阅读笔记
简介 最近在阅读<Java并发编程之美>这本书,为了督促自己啃完这本书,计划每读完一章写一篇阅读笔记,供以后参考. 笔记列表 第一部分 Java并发编程基础篇 第1章 并发编程线程基础 第 ...
- 编程之美系列之一——阶乘的运算
前言: 本人一直以来都对算法很有兴趣,前些日子拿到<编程之美>这本书,爱不释手,遂有意将书中的一些本人觉得较有意思的题目以及自己的心得拿出来与大家分享,共同讨论,共同进步. 需 ...
- 编程之美计算0到N中包含数字1的个数
转自:http://blog.csdn.net/hongjuntu123/article/details/8743266 有这样一个函数f(n),对于任意正整数n,它表示从 0 到 n 之间出现&qu ...
- formatter java_Java编程中的Java Formatter是什么?
Java编程中的Java Formatter是什么? 作者:admin 分类:PHP, JAVA, .NET文章 时间:2017-03-30 21:13:02 点击量:1428 Java Format ...
最新文章
- iOS使用支付宝支付步骤
- Intellij Idea 生成serialVersionUID的方法
- idea svn配置_IDEA 导入svn项目实践
- 网络通信之 字节序转换原理与网络字节序、大端和小端模式
- Django(part42)--限制IP请求次数
- android 弹出网格菜单,在android中的recyclerView中显示弹出按钮的确...
- Win7 访问共享时输入正确密码仍然提示密码错误
- hdu max sum
- 我经常访问的技术网站
- 同一主机上WordPress博客更换域名简易八步骤(2)
- Python|520表白神器
- JS (与运算)详解
- 谈谈JavaScript中function多重理解
- 长语音识别_长文本语音识别_语音 识别 - 云+社区 - 腾讯云
- 数据平台建设的几种方案
- 标记偏置 隐马尔科夫 最大熵马尔科夫 HMM MEMM
- HZOJ visit
- 【肌电信号】基于matlab GUI肌电信号处理【含Matlab源码 966期】
- Linux20180421五周第二次课(4月19日)
- yagmail群发邮件
热门文章
- Shell脚本应用之服务启动脚本
- 关于ext4 simg fill chunk type
- overcommit_memory 内核参数
- php mysql占位符_php中的占位符
- velocity 变量 获取_velocity 怎么得到项目根路径
- [RK3399][Android7.1] 基于regmap的I2C实现方法
- python入口文件_python常用模块:项目目录规范、定制程序入口、自定义模块、引用变量、time和datetime模块...
- python中lock锁和阻塞_Python的锁源码剖析
- 高翔视觉SLAM十四讲:第三讲中plotTrajectory.cpp怎么运行
- c语言清除命令行当前行_零基础学习树莓派_常用命令