1. 二叉树排序

二叉树排序的描述也是一个递归的描述, 所以二叉树排序的构造自然也用递归的:

二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:

(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
(4)没有键值相等的结点。
 
2. 二叉树排序代码实现:
  1. package com.himi.classisort;
  2. public class BinaryTreeSortDemo {
  3. private int value;// current value
  4. private BinaryTreeSortDemo lChild;// left child
  5. private BinaryTreeSortDemo rChild;// right child
  6. public BinaryTreeSortDemo(int value, BinaryTreeSortDemo l, BinaryTreeSortDemo r) {
  7. this.value = value;
  8. this.lChild = l;
  9. this.rChild = r;
  10. }
  11. public BinaryTreeSortDemo getLChild() {
  12. return lChild;
  13. }
  14. public void setLChild(BinaryTreeSortDemo child) {
  15. lChild = child;
  16. }
  17. public BinaryTreeSortDemo getRChild() {
  18. return rChild;
  19. }
  20. public void setRChild(BinaryTreeSortDemo child) {
  21. rChild = child;
  22. }
  23. public int getValue() {
  24. return value;
  25. }
  26. public void setValue(int value) {
  27. this.value = value;
  28. }
  29. // iterater all node.
  30. public static void iterater(BinaryTreeSortDemo root) {
  31. // 先迭代遍历根节点的左边
  32. if (root.lChild != null) {
  33. iterater(root.getLChild());
  34. }
  35. // 再迭代遍历根节点
  36. System.out.print(root.getValue() + " ");
  37. // 最后迭代遍历根节点的右边
  38. if (root.rChild != null) {
  39. iterater(root.getRChild());
  40. }
  41. }
  42. /**
  43. * add child to the current node to construct a tree. Time: O( nlog(n) )
  44. **/
  45. public void addChild(int n) {
  46. if (n < value) {
  47. if (lChild != null) {
  48. lChild.addChild(n);
  49. } else {
  50. lChild = new BinaryTreeSortDemo(n, null, null);
  51. }
  52. } else {
  53. if (rChild != null) {
  54. rChild.addChild(n);
  55. } else {
  56. rChild = new BinaryTreeSortDemo(n, null, null);
  57. }
  58. }
  59. }
  60. // test case.
  61. public static void main(String[] args) {
  62. System.out.println();
  63. int[] arr = new int[] {23, 54, 1, 65, 9, 3, 100};
  64. //创建一个根节点
  65. BinaryTreeSortDemo root = new BinaryTreeSortDemo(arr[0], null, null);
  66. //将数组以排序二叉树的方式摆放
  67. for (int i = 1; i < arr.length; i++) {
  68. root.addChild(arr[i]);
  69. }
  70. //遍历上面形成的排序二叉树
  71. BinaryTreeSortDemo.iterater(root);
  72. }
  73. }

运行效果:

Java基础知识强化58:经典排序之二叉树排序(BinaryTreeSort)的更多相关文章

  1. Java基础知识强化之集合框架笔记76:ConcurrentHashMap之 ConcurrentHashMap简介

    1. ConcurrentHashMap简介: ConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和Hashtable功能相同但是线程安全的方法.Conc ...

  2. Java基础知识强化51:经典排序之桶排序(BucketSort)

    1. 首先说明三点: (1)桶排序是稳定的 (2)桶排序是常见排序里最快的一种,比快排还要快…大多数情况下 (3)桶排序非常快,但是同时也非常耗空间,基本上是最耗空间的一种排序算法 2. 桶排序的分析 ...

  3. Java基础知识强化57:经典排序之希尔排序(ShellSort)

    1. 希尔排序的原理: 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法.该方法因DL.Shell于1959年提出 ...

  4. Java基础知识强化之IO流笔记52:IO流练习之 把一个文件中的字符串排序后再写入另一个文件案例

    1. 把一个文件中的字符串排序后再写入另一个文件 已知s.txt文件中有这样的一个字符串:"hcexfgijkamdnoqrzstuvwybpl" 请编写程序读取数据内容,把数据排 ...

  5. Java基础知识强化之集合框架笔记69:Collections类之ArrayList存储自自定义对象并排序的案例

    1. ArrayList存储自自定义对象并排序的案例: ArrayList存储自自定义对象,并使用Collections对ArrayList存储基本包装类的元素排序. 2. 代码实现: (1)Stud ...

  6. Java基础知识强化之集合框架笔记47:Set集合之TreeSet保证元素唯一性和比较器排序的原理及代码实现(比较器排序:Comparator)

    1. 比较器排序(定制排序) 前面我们说到的TreeSet的自然排序是根据集合元素的大小,TreeSet将它们以升序排列. 但是如果需要实现定制排序,比如实现降序排序,则要通过比较器排序(定制排序)实 ...

  7. Java基础知识强化之集合框架笔记45:Set集合之TreeSet存储自定义对象并遍历练习1(自然排序:Comparable)

    1. 自然排序: TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间的大小关系,然后将集合元素按照升序排列,这种方式就是自然排序. Java中提供了一个Comp ...

  8. Java基础知识强化之多线程笔记01:多线程基础知识(详见Android(java)笔记61~76)

    1. 基础知识: Android(java)学习笔记61:多线程程序的引入    ~    Android(java)学习笔记76:多线程-定时器概述和使用 

  9. Java基础知识强化之集合框架笔记43:Set集合之TreeSet存储Integer类型的元素并遍历

    1. TreeSet类概述: • 能够对元素按照某种规则进行排序. • 或者根据创建set时提供的Comparator进行排序 • 具体取决于使用的构造方法 2. 代码示例: package cn.i ...

随机推荐

  1. VS专案项目无法生成pdb文件解决办法

    在系统盘里找到该项目对应的dll文件(我的是在C:\Windows\Microsoft.NET\assembly\GAC_MSIL目录下),删除该dll后重新生成项目即可.

  2. swing——JFrame基本操作

    用JFrame(String String1)创建一个窗口 public void setBounds(int a,int b,int width,int height)设置窗口初始化的位置(a,b) ...

  3. DOM动态添加表格

    var table=document.createElement("table"); table.border=1; var b=document.createElement(&q ...

  4. 记一次MySQl 安装1067错误

    1.今天阿里云windows server 2008 r2服务器上安装mysql,配置完发现无法启动mysql服务(并发设置的是500),查询windows日志提示 Unknown/unsupport ...

  5. Oracle数据库之创建表空间与用户

    Oracle数据库之创建表空间与用户 一.创建表空间 基本语法表述: CREATE TABLESPACE tablespace_name [DATAFILE datafile_spec1 [,data ...

  6. 移动端web页面使用position:fixed问题总结

    近期完成了一个新的项目(搜狐直播),其中又涉及到了 fixed(固定位置定位)的问题,在之前的文章<移动Web产品前端开发口诀——“快”>中已经阐述过我对 iScroll 的态度,所以在这 ...

  7. phpcms v9 数据库分离部署

    v9数据模型功能,允许用户把不同的数据表,分离到不同的数据库服务器上.以实现负载的分离,更加的符合大访问网站的需求. <ignore_js_op> 数据分离方法 1.数据库连接配置配置文件 ...

  8. 不在界面上用控件 动态创建idhttp,IdAntiFreeze来用

    不在界面上用控件 动态创建idhttp,IdAntiFreeze来用 var IdHTTP: Tidhttp; IdAntiFreeze: TidAntiFreeze; begin IdAntiFre ...

  9. 《python基础教程》笔记之 条件语句和循环语句

    布尔变量 下面的值会被解释器看做假(false): False None 0 "" () {} [] 其它的一切都被解释为真. >>> TrueTrue>& ...

  10. strnclmp和strlen函数的用法

    一.strncmp 函数 函数原型: 1.函数原型:int strncmp (const char *s1, const char *s2, size_t  n) 2.头文件: <string. ...