【编程之美】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的占用率终会稳定 ...
随机推荐
- android的四种加载模式
在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. An ...
- BZOJ 2005: [Noi2010]能量采集( 数论 + 容斥原理 )
一个点(x, y)的能量损失为 (gcd(x, y) - 1) * 2 + 1 = gcd(x, y) * 2 - 1. 设g(i)为 gcd(x, y) = i ( 1 <= x <= ...
- 关于mysql5.6.13的一个疑问
现在在做一个系统 使用了这么一个查询 select a.id,a.fdate,a.fbillno,e.fname as fwarehousename,a.fnote,c.fname as fsuppl ...
- Xcode4.6 自制iOS可用的 Framework
First of all:新建一个空白project. File->New->Project 然后新建两个文件 File->New->File 如图 然后选择targets ...
- UVA 10739 String to Palindrome(dp)
Problem H String to Palindrome Input: Standard Input Output: Standard Output Time Limit: 1 Second In ...
- word2vec 中的数学原理具体解释(一)文件夹和前言
word2vec 是 Google 于 2013 年开源推出的一个用于获取 word vector 的工具包.它简单.高效.因此引起了非常多人的关注. 因为 word2vec 的作者 Tomas ...
- GDI GDI+ 的区别
GDI+是GDI的下一个版本,它进行了很好的改进,并且易用性更好.GDI的一个好处就是你不必知道任何关于数据怎样在设备上渲染的细节,GDI+更好的实现了这个优点,也就是说,GDI是一个中低层API,你 ...
- 一个关于native sql的程序
*&---------------------------------------------------------------------* *& Report ZHR_BPM11 ...
- 关于storyboard的一点学习记录
1.storyboard中“Main storyboard file base name”这个用来注册启动是所需要的storyboard 文件名称.当我们程序启动的时候,我们的工程就会根据这一项来自动 ...
- Apriori算法实现
Apriori算法原理:http://blog.csdn.net/kingzone_2008/article/details/8183768 import java.util.HashMap; imp ...