Java基础知识强化58:经典排序之二叉树排序(BinaryTreeSort)
1. 二叉树排序
二叉树排序的描述也是一个递归的描述, 所以二叉树排序的构造自然也用递归的:
二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:
package com.himi.classisort;
public class BinaryTreeSortDemo {
private int value;// current value
private BinaryTreeSortDemo lChild;// left child
private BinaryTreeSortDemo rChild;// right child
public BinaryTreeSortDemo(int value, BinaryTreeSortDemo l, BinaryTreeSortDemo r) {
this.value = value;
this.lChild = l;
this.rChild = r;
}
public BinaryTreeSortDemo getLChild() {
return lChild;
}
public void setLChild(BinaryTreeSortDemo child) {
lChild = child;
}
public BinaryTreeSortDemo getRChild() {
return rChild;
}
public void setRChild(BinaryTreeSortDemo child) {
rChild = child;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
// iterater all node.
public static void iterater(BinaryTreeSortDemo root) {
// 先迭代遍历根节点的左边
if (root.lChild != null) {
iterater(root.getLChild());
}
// 再迭代遍历根节点
System.out.print(root.getValue() + " ");
// 最后迭代遍历根节点的右边
if (root.rChild != null) {
iterater(root.getRChild());
}
}
/**
* add child to the current node to construct a tree. Time: O( nlog(n) )
**/
public void addChild(int n) {
if (n < value) {
if (lChild != null) {
lChild.addChild(n);
} else {
lChild = new BinaryTreeSortDemo(n, null, null);
}
} else {
if (rChild != null) {
rChild.addChild(n);
} else {
rChild = new BinaryTreeSortDemo(n, null, null);
}
}
}
// test case.
public static void main(String[] args) {
System.out.println();
int[] arr = new int[] {23, 54, 1, 65, 9, 3, 100};
//创建一个根节点
BinaryTreeSortDemo root = new BinaryTreeSortDemo(arr[0], null, null);
//将数组以排序二叉树的方式摆放
for (int i = 1; i < arr.length; i++) {
root.addChild(arr[i]);
}
//遍历上面形成的排序二叉树
BinaryTreeSortDemo.iterater(root);
}
}
运行效果:

Java基础知识强化58:经典排序之二叉树排序(BinaryTreeSort)的更多相关文章
- Java基础知识强化之集合框架笔记76:ConcurrentHashMap之 ConcurrentHashMap简介
1. ConcurrentHashMap简介: ConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和Hashtable功能相同但是线程安全的方法.Conc ...
- Java基础知识强化51:经典排序之桶排序(BucketSort)
1. 首先说明三点: (1)桶排序是稳定的 (2)桶排序是常见排序里最快的一种,比快排还要快…大多数情况下 (3)桶排序非常快,但是同时也非常耗空间,基本上是最耗空间的一种排序算法 2. 桶排序的分析 ...
- Java基础知识强化57:经典排序之希尔排序(ShellSort)
1. 希尔排序的原理: 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法.该方法因DL.Shell于1959年提出 ...
- Java基础知识强化之IO流笔记52:IO流练习之 把一个文件中的字符串排序后再写入另一个文件案例
1. 把一个文件中的字符串排序后再写入另一个文件 已知s.txt文件中有这样的一个字符串:"hcexfgijkamdnoqrzstuvwybpl" 请编写程序读取数据内容,把数据排 ...
- Java基础知识强化之集合框架笔记69:Collections类之ArrayList存储自自定义对象并排序的案例
1. ArrayList存储自自定义对象并排序的案例: ArrayList存储自自定义对象,并使用Collections对ArrayList存储基本包装类的元素排序. 2. 代码实现: (1)Stud ...
- Java基础知识强化之集合框架笔记47:Set集合之TreeSet保证元素唯一性和比较器排序的原理及代码实现(比较器排序:Comparator)
1. 比较器排序(定制排序) 前面我们说到的TreeSet的自然排序是根据集合元素的大小,TreeSet将它们以升序排列. 但是如果需要实现定制排序,比如实现降序排序,则要通过比较器排序(定制排序)实 ...
- Java基础知识强化之集合框架笔记45:Set集合之TreeSet存储自定义对象并遍历练习1(自然排序:Comparable)
1. 自然排序: TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间的大小关系,然后将集合元素按照升序排列,这种方式就是自然排序. Java中提供了一个Comp ...
- Java基础知识强化之多线程笔记01:多线程基础知识(详见Android(java)笔记61~76)
1. 基础知识: Android(java)学习笔记61:多线程程序的引入 ~ Android(java)学习笔记76:多线程-定时器概述和使用
- Java基础知识强化之集合框架笔记43:Set集合之TreeSet存储Integer类型的元素并遍历
1. TreeSet类概述: • 能够对元素按照某种规则进行排序. • 或者根据创建set时提供的Comparator进行排序 • 具体取决于使用的构造方法 2. 代码示例: package cn.i ...
随机推荐
- MySQL利用binlog来恢复数据库
1.根据binlog解析出所有ring数据库的所有sql [mysql@localhost ]$ mysqlbinlog --no-defaults --database=ring --start-d ...
- Redhat Enterprise 5.4下安装配置Oracle 11g R2详细过程
1.Linux环境配置准备 环境:Linux:Redhat Enterprise 5.4,DB:Oracle 11g R2 X64,Oracle安装到/home/oralce_11目录下. 配置过程如 ...
- Objective-C学习篇07—NSArray与NSMutableArray
大纲 NSArray NSMutableArray 快速枚举 NSArray NSArray是一个静态数组,也就是一个不可变数组,一旦创建以后,就不能进行添加,删除或者修改其中的元素.NSArray继 ...
- PHP 异常处理
PHP 异常处理 异常用于在指定的错误发生时改变脚本的正常流程. 异常是什么 PHP 5 提供了一种新的面向对象的错误处理方法. 异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程.这种情况 ...
- 重装eclipse要做的事(二)---设置工作空间默认编码
在Eclipse的开发使用中,我们经常使用的是UTF-8,但是刚刚安装的或者是导入的项目是其他编码的默认是GBK的,这就造成我们的项目乱码,一些中文解析无法查看,对我们的开发造成不便. 我使用的是My ...
- 设置Activity显示和关闭时的动画效果
设置Activity显示和关闭时的动画效果 通过overridePendingTransition方法可以设置Activity显示和关闭的动画效果.首先需要在res/anim目录中建立相应的动画资源文 ...
- 一个简单的javascript获取URL参数的代码
function request(paras){ var url = location.href; var paraString = url.substring(url.indexOf("? ...
- 功能:使用QQ号登陆,并加上微信和短信提醒,是否增量备份可选,阿里大鱼短信发送开发与测试,聚合数据(用JSON发短信,比较清楚)
微博就可以,所以其它软件也可以http://desktop.weibo.com/ http://blog.csdn.net/jueblog/article/details/14497181http:/ ...
- 【转】一个FAE(AE)的体会和大家交流
原文网址:http://www.52rd.com/bbs/dispbbs.asp?boardID=63&ID=228682 本人在国内某芯片设计公司工作近5年时间岗位是AE和FAE,两个工作量 ...
- .OCX、.dll文件注册命令Regsvr32的使用
1.打开文件,打开需要注册的OCX文件或dll文件,2.然后根据需要进行OCX文件或DLL文件的注册和反注册 DLL.OCX注册方法--文件Regsvr32用法及情况介绍 使用过activex的人都知 ...