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复制表
create table 表名 like 要复制的表名 //复制表结构 insert into 表名 select * from 要复制的表名 //复制数据 方法2,一般不推荐,如果后台加数据,可 ...
- CSS的力量
CSS(Cascading Style Sheet)级联样式表,是一种美观网页设计的解决方案,也是W3C推荐的标准,他可以是我们的网页设计更灵活,更美观,使设计人员对内容的设计和样式的设计分离,使设计 ...
- Ubuntu 13.10 Mono安装历程
这两天捣鼓一下Mono,记录一下自己所遇到的问题,已经解决办法 首先,先打开gnome-terminal 1. 先更新的一下系统 sudo apt-get update sudo apt-get up ...
- iOS UITableView的使用大全-备用
首先.对UITableView进行讲解,下面有对它进行实际的应用 UITableView 显示大型内容的列表 单行,多列 垂直滚动,没有水平滚动 大量的数据集 性能强大,而且普遍存在于iPhone的应 ...
- CentOS下安装postgresql
一.说明 postgresql版本:9.4.1 安装包: postgresql94-server-9.4.1-1PGDG.rhel6.x86_64.rpm postgresql94-libs-9.4. ...
- (转)關於flashback query的ORA-01466錯誤
摘自:http://blog.sina.com.cn/s/blog_70a2bdb80100pqid.html 使用Oracle 10g 新特性flashback query來查詢過去修改並已提交的記 ...
- VLC命令行的应用
vlc -vvv rtsp://218.204.223.237:554/live/1/0547424F573B085C/gsfp90ef4k0a6iap.sdp --sout #transcode{v ...
- Basefragment的封装使用
1.前言 封装作为面向对象的三大特性之一,在我们平时的coding过程用的那是非常的多的.大多数时候,我们可以根据封装情况评判代码的质量水平. 本文主要讲解的是fragment的封装.大体上,在项目的 ...
- Qt入门(3)——信号和槽
信号和槽用于对象间的通讯.信号/槽机制是Qt的一个中心特征并且也许是Qt与其它工具包的最不相同的部分.在图形用户界面编程中,我们经常希望一个窗口部件的一个变化被通知给另一个窗口部件.更一般地,我们希望 ...
- 【转】android应用开发全程实录-你有多熟悉listview?---不错
原文网址:http://www.cnblogs.com/noTice520/archive/2011/12/05/2276379.html 今天给大家带来<android应用开发全程实录> ...