【编程之美】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二进制实现重建的更多相关文章
- [质疑]编程之美求N!的二进制最低位1的位置的问题
引子:编程之美给出了求N!的二进制最低位1的位置的二种思路,但是呢?但是呢?不信你仔细听我道来. 1.编程之美一书给出的解决思路 问题的目标是N!的二进制表示中最低位1的位置.给定一个整数N,求N!二 ...
- java并发编程之美-阅读记录1
1.1什么是线程? 在理解线程之前先要明白什么是进程,因为线程是进程中的一个实体.(线程是不会独立存在的) 进程:是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,线程则是进程中的 ...
- Java并发编程系列-(5) Java并发容器
5 并发容器 5.1 Hashtable.HashMap.TreeMap.HashSet.LinkedHashMap 在介绍并发容器之前,先分析下普通的容器,以及相应的实现,方便后续的对比. Hash ...
- Java并发编程系列-(6) Java线程池
6. 线程池 6.1 基本概念 在web开发中,服务器需要接受并处理请求,所以会为一个请求来分配一个线程来进行处理.如果每次请求都新创建一个线程的话实现起来非常简便,但是存在一个问题:如果并发的请求数 ...
- java二进制表示形式与移位操作符
java二进制表示形式 java中数字的二进制表示形式称为"有符号的二进制补码",下面先介绍原码,反码,补码. 编码 计算方法 原码 用最高位表示符号位,'1'表示负号,'0'表示 ...
- 【编程之美】2.5 寻找最大的k个数
有若干个互不相等的无序的数,怎么选出其中最大的k个数. 我自己的方案:因为学过找第k大数的O(N)算法,所以第一反应就是找第K大的数.然后把所有大于等于第k大的数取出来. 写这个知道算法的代码都花了2 ...
- 【编程之美】CPU
今天开始看编程之美 .第一个问题是CPU的使用率控制,微软的问题果然高大上,我一看就傻了,啥也不知道.没追求直接看答案试了一下.发现自己电脑太好了,4核8线程,程序乱飘.加了一个进程绑定,可以控制一个 ...
- Java 二进制与十六进制转换
Java 二进制与十六进制转换 二进制转换十六进制 /** * @description 将二进制转换成16进制 * * @param buf * @return */ public static S ...
- 编程之美_1.1 让CPU占用率曲线听你指挥
听到有人说让要写一个程序,让用户来决定Windows任务管理器的CPU占用率. 觉得很好奇.但第一个想法就是写个死循环.哈哈.不知道具体的占用率是多少,但至少能保证在程序运行时,CPU的占用率终会稳定 ...
随机推荐
- could not create the java virtual machine(转)
打开不了myeclipse,报错“could not create the java virtual machine”,解决问题过程如下: 1.在D:\MyEclipse\eclipse有个eclip ...
- mysql学习之中的一个:mysql安装
我用的时mac系统,本来想在mac系统上装一个,可是发现mac系统始终无法用password登入到本机server,很奇怪的问题(在stackflow上看了些回复,也没有找到原因),最后仅仅好装到虚拟 ...
- java对象占用内存大小计算方式
案例一: User public class User { } UserSizeTest public class UserSizeTest { static final Runtime runTim ...
- Java 接口和抽象类差别
原文:http://blog.csdn.net/sunboard/article/details/3831823 1.概述 一个软件设计的好坏,我想非常大程度上取决于它的总体架构,而这个总体架构事实上 ...
- HDU--杭电--3790--最短路径问题
最短路径问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- Silverlight技术调查(3)——国际化
原文 Silverlight技术调查(3)——国际化 网上有很多关于Silverlight国际化的说明,包括MSDN的示例,都没有强调一点,下面以红色标示,基础国际化知识请先参考MSDN相关章节,关键 ...
- 基于visual Studio2013解决面试题之0602全排列
题目
- 基于visual Studio2013解决C语言竞赛题之1059最大平台
题目 解决代码及点评 /* 功能:编写求最大平台问题的程序. 有n个整数a1,a2, ... an, 若满足a1≤a2≤ ... ≤ an , 则认为在这n个数中有最大平台.在这种情 ...
- Kendo UI开发教程(20): Kendo MVVM 数据绑定(九) Text
Text绑定可以使用ViewModel来设置DOM元素的文本属性,如果需要设置input,textarea,或select的显示,需要使用value属性. 1 <span data-bind=& ...
- Apriori算法实现
Apriori算法原理:http://blog.csdn.net/kingzone_2008/article/details/8183768 import java.util.HashMap; imp ...