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 ...
随机推荐
- VS专案项目无法生成pdb文件解决办法
在系统盘里找到该项目对应的dll文件(我的是在C:\Windows\Microsoft.NET\assembly\GAC_MSIL目录下),删除该dll后重新生成项目即可.
- swing——JFrame基本操作
用JFrame(String String1)创建一个窗口 public void setBounds(int a,int b,int width,int height)设置窗口初始化的位置(a,b) ...
- DOM动态添加表格
var table=document.createElement("table"); table.border=1; var b=document.createElement(&q ...
- 记一次MySQl 安装1067错误
1.今天阿里云windows server 2008 r2服务器上安装mysql,配置完发现无法启动mysql服务(并发设置的是500),查询windows日志提示 Unknown/unsupport ...
- Oracle数据库之创建表空间与用户
Oracle数据库之创建表空间与用户 一.创建表空间 基本语法表述: CREATE TABLESPACE tablespace_name [DATAFILE datafile_spec1 [,data ...
- 移动端web页面使用position:fixed问题总结
近期完成了一个新的项目(搜狐直播),其中又涉及到了 fixed(固定位置定位)的问题,在之前的文章<移动Web产品前端开发口诀——“快”>中已经阐述过我对 iScroll 的态度,所以在这 ...
- phpcms v9 数据库分离部署
v9数据模型功能,允许用户把不同的数据表,分离到不同的数据库服务器上.以实现负载的分离,更加的符合大访问网站的需求. <ignore_js_op> 数据分离方法 1.数据库连接配置配置文件 ...
- 不在界面上用控件 动态创建idhttp,IdAntiFreeze来用
不在界面上用控件 动态创建idhttp,IdAntiFreeze来用 var IdHTTP: Tidhttp; IdAntiFreeze: TidAntiFreeze; begin IdAntiFre ...
- 《python基础教程》笔记之 条件语句和循环语句
布尔变量 下面的值会被解释器看做假(false): False None 0 "" () {} [] 其它的一切都被解释为真. >>> TrueTrue>& ...
- strnclmp和strlen函数的用法
一.strncmp 函数 函数原型: 1.函数原型:int strncmp (const char *s1, const char *s2, size_t n) 2.头文件: <string. ...