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二进制实现重建的更多相关文章

  1. [质疑]编程之美求N!的二进制最低位1的位置的问题

    引子:编程之美给出了求N!的二进制最低位1的位置的二种思路,但是呢?但是呢?不信你仔细听我道来. 1.编程之美一书给出的解决思路 问题的目标是N!的二进制表示中最低位1的位置.给定一个整数N,求N!二 ...

  2. java并发编程之美-阅读记录1

    1.1什么是线程? 在理解线程之前先要明白什么是进程,因为线程是进程中的一个实体.(线程是不会独立存在的) 进程:是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,线程则是进程中的 ...

  3. Java并发编程系列-(5) Java并发容器

    5 并发容器 5.1 Hashtable.HashMap.TreeMap.HashSet.LinkedHashMap 在介绍并发容器之前,先分析下普通的容器,以及相应的实现,方便后续的对比. Hash ...

  4. Java并发编程系列-(6) Java线程池

    6. 线程池 6.1 基本概念 在web开发中,服务器需要接受并处理请求,所以会为一个请求来分配一个线程来进行处理.如果每次请求都新创建一个线程的话实现起来非常简便,但是存在一个问题:如果并发的请求数 ...

  5. java二进制表示形式与移位操作符

    java二进制表示形式 java中数字的二进制表示形式称为"有符号的二进制补码",下面先介绍原码,反码,补码. 编码 计算方法 原码 用最高位表示符号位,'1'表示负号,'0'表示 ...

  6. 【编程之美】2.5 寻找最大的k个数

    有若干个互不相等的无序的数,怎么选出其中最大的k个数. 我自己的方案:因为学过找第k大数的O(N)算法,所以第一反应就是找第K大的数.然后把所有大于等于第k大的数取出来. 写这个知道算法的代码都花了2 ...

  7. 【编程之美】CPU

    今天开始看编程之美 .第一个问题是CPU的使用率控制,微软的问题果然高大上,我一看就傻了,啥也不知道.没追求直接看答案试了一下.发现自己电脑太好了,4核8线程,程序乱飘.加了一个进程绑定,可以控制一个 ...

  8. Java 二进制与十六进制转换

    Java 二进制与十六进制转换 二进制转换十六进制 /** * @description 将二进制转换成16进制 * * @param buf * @return */ public static S ...

  9. 编程之美_1.1 让CPU占用率曲线听你指挥

    听到有人说让要写一个程序,让用户来决定Windows任务管理器的CPU占用率. 觉得很好奇.但第一个想法就是写个死循环.哈哈.不知道具体的占用率是多少,但至少能保证在程序运行时,CPU的占用率终会稳定 ...

随机推荐

  1. 用反射,将DataRow行转为Object对象

    /// <summary> /// 反射辅助类 /// </summary> public class ReflectionHelper { /// <summary&g ...

  2. 基于visual Studio2013解决面试题之0808寻找中间数

     题目

  3. SilkTest Q&A 13

    Q121 :我想要测试 windows2003 上的 remote 应用,但是每次都得到如下的错误 我想要测试 windows2003 上的 remote 应用,但是每次都得到如下的错误: " ...

  4. JS firebug小技巧

    实际上前端的发展与进步也离不开浏览器的支持,而对于开发者来讲,浏览器最好的支持,就是对于debug的良好支持,甚至在某些兴许接手的项目中,前端的debug甚至能够解决好多问题--不说了,都是泪啊!还是 ...

  5. 【Android开源项目分析】android轻量级开源缓存框架——ASimpleCache(ACache)源代码分析

    转载请注明出处:http://blog.csdn.net/zhoubin1992/article/details/46379055 ASimpleCache框架源代码链接 https://github ...

  6. 【Android】自己定义控件——仿天猫Indicator

    今天来说说类似天猫的Banner中的小圆点是怎么做的(图中绿圈部分) 在学习自己定义控件之前,我用的是很二的方法,直接在布局中放入多个ImageView,然后代码中依据Pager切换来改变图片.这样的 ...

  7. 实现长按删除QListWidget的Item

    原地址:http://blog.sina.com.cn/s/blog_5c70dfc80100r99u.html 要想长按删除QListWidget的Item,必须重写鼠标事件,所以需要继承QList ...

  8. Storm流计算从入门到精通之技术篇(高并发策略、批处理事务、Trident精解、运维监控、企业场景)

    1.Storm全面.系统.深入讲解,采用最新的稳定版本Storm 0.9.0.1 :   2.注重实践,对较抽象难懂的技术点如Grouping策略.并发度及线程安全.批处理事务.DRPC.Storm ...

  9. 数据层交换和高性能并发处理(开源ETL大数据治理工具--KETTLE使用及二次开发 )

    ETL是什么?为什么要使用ETL?KETTLE是什么?为什么要学KETTLE?        ETL是数据的抽取清洗转换加载的过程,是数据进入数据仓库进行大数据分析的载入过程,目前流行的数据进入仓库的 ...

  10. Poj 3771 hdu 3405

    poj 3771 http://poj.org/problem?id=3771 wiki Prim http://zh.wikipedia.org/wiki/%E6%99%AE%E6%9E%97%E5 ...