原创:转载请注明出处

目的:想用java实现二叉树排序算法

思想:利用java中面向对象的思想,即:

  Tree:类

  树根Tree:root    //static所属于每一个Tree

  左节点Tree:leftSon

  右节点Tree:rightSon

  父亲节点Tree:father

上代码 Tree类:

package com.cissst.dom1;

/**
* 二叉树
* @author phoebe
*/
public class Tree {
public Integer data;//每一个节点的值
public static Tree root;//根节点(有且仅有一个)
public Tree father;//父节点
public Tree leftSon;//左子节点
public Tree rightSon;//右子节点 //左树是否为空
public boolean hasLeftSon(){
return leftSon!=null;
}
//右树是否为空
public boolean hasRightSon(){
return rightSon!=null;
} //插入节点
public void insert(Integer data,Tree father){
/**
* 思想:先让data和root中的值进行比较,大于0插入右边,小于0插入左边,计划使用递归思想
*/
//等于root.data
if(data.compareTo(father.data)==0){
return;
}
//大于root.data
if(data.compareTo(father.data)>0){
//父节点没有右节点
if(!father.hasRightSon()){
father.rightSon = new Tree();//生成一个右节点
father.rightSon.data=data;//给右节点赋值
father.rightSon.father=father;//指定右节点的父亲是谁
}else{
insert(data,father.rightSon);
}
} //小于同上
if(data.compareTo(father.data)<0){
//父节点没有左节点
if(!father.hasLeftSon()){
father.leftSon = new Tree();//生成一个右节点
father.leftSon.data=data;//给右节点赋值
father.leftSon.father=father;//指定右节点的父亲是谁
}else{
insert(data,father.leftSon);
}
}
} /**
* 总体插入操作
* 1.判断是否有树根,没有的话将数据添加到树根里
* 2.有树根调用insert的重载方法,判断插入到左son还是右son
* @param data
*/
public void insert(Integer data){
if(root==null){
root = new Tree();
root.data=data;
return;
}else{
insert(data,root);
}
} }

测试代码:

package com.cissst.dom1;

/**
* 树测试代码
* @author phoebe
*/
public class TreeTest {
public static void main(String[] args) {
TreeTest tt = new TreeTest();
Tree tree = new Tree();
tree.insert(5);
tree.insert(2);
tree.insert(3);
tree.insert(1);
tree.insert(8);
tree.insert(3);
tt.outPutTree(tree.root);
tt.getMinValue(tree.root);
tt.getMaxValue(tree.root);
}
//遍历树中的集合
public void outPutTree(Tree tree){
System.out.print(tree.data+" ");
if(tree.hasLeftSon()){
outPutTree(tree.leftSon);
}
if(tree.hasRightSon()){
outPutTree(tree.rightSon);
}
}
//找出树中最小的值
public void getMinValue(Tree tree){
if(tree.hasLeftSon()){
getMinValue(tree.leftSon);
}else{
System.out.println("最小值"+tree.data);
}
} //找出树中最大的值
public void getMaxValue(Tree tree){
if(tree.hasRightSon()){
getMaxValue(tree.rightSon);
}else{
System.out.println("最大值"+tree.data);
}
} }

java二叉树排序实现的更多相关文章

  1. java 二叉树排序

    1 class BinaryTree{ 2 class Node{ 3 private Comparable data; 4 private Node left; 5 private Node rig ...

  2. Java基础知识强化58:经典排序之二叉树排序(BinaryTreeSort)

    1. 二叉树排序 二叉树排序的描述也是一个递归的描述, 所以二叉树排序的构造自然也用递归的: 二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它 ...

  3. Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法

    Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...

  4. Java 常用排序算法/程序员必须掌握的 8大排序算法

    Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配 ...

  5. java各种排序实现

    排序是程序开发中一种非常常见的操作,对一组任意的数据元素(或记录)经过排序操作后,就可以把他们变成一组按关键字排序的有序队列. 对一个排序算法来说,一般从下面3个方面来衡量算法的优劣: 时间复杂度:它 ...

  6. Java常用排序算法及性能测试集合

    测试报告: Array length: 20000 bubbleSort : 573 ms bubbleSortAdvanced : 596 ms bubbleSortAdvanced2 : 583 ...

  7. Java各种排序算法

      Java各种排序算法详解 排序大的分类可以分为两种:内排序和外排序.在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序.下面讲的排序都是属于内排序. 内排序有 ...

  8. java 集合排序(转)

    Java API针对集合类型排序提供了两种支持:java.util.Collections.sort(java.util.List)java.util.Collections.sort(java.ut ...

  9. java:高速排序算法与冒泡排序算法

     Java:高速排序算法与冒泡算法 首先看下,冒泡排序算法与高速排序算法的效率: 例如以下的是main方法: /**   *  * @Description:  * @author:cuiyaon ...

随机推荐

  1. 20161226xlVBA演示文稿替换文字另存pdf

    Const ModelText As String = "机构名称" Const ModelName As String = "测试文件.pptx" Sub N ...

  2. 1月10日 ruby基础教程,查漏补缺; 2月22日 Exception补充

    https://ruby-doc.org/core-2.5.0/Exception.html 1月20日练习完1,2章. 第一章 初探 ‘’单引号不执行转义符. \t 制表符.\n 换行符. p me ...

  3. Confluence 6 设置公共访问备注

    你不能为匿名用户赋予空间管理员或者限制权限. 你可以让用户自行注册你的 Confluence 站点,同时也可以选择其他的用户注册选项,比如邀请用户注册等.请查看:Add and Invite User ...

  4. getTransaction().commit(),getDBTransaction().commit(),getOADBTransaction().commit之间的区别

    原文: Transaction is an interface which provides base methods for defining database transactions.DBTra ...

  5. Eclipse SVN修改用户名和密码

    问题描述:     Eclipse的SVN插件Subclipse做得很好,在svn操作方面提供了很强大丰富的功能.但到目前为止,该插件对svn用户的概念极为淡薄,不但不能方便地切换用户,而且一旦用户的 ...

  6. Get和Load的区别----hibernate

    Get和Load的区别

  7. textAlign

    <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head>    < ...

  8. 快速SQL调优/优化(SQL TUNING)——1分钟搞定超慢SQL

    前几天,一个用户的研发人员找到我了,说他们有个SQL语句非常慢,我说多慢?他们说:半个小时也没出结果.于是问他们要了SQL语句和执行计划,SQL语句就不能再这里贴出来了,下面是调整前的执行计划(略去某 ...

  9. 常用OS获取信息命令

    一.linux#CPU信息(总核心数和型号) cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c #物理CPU数及每颗物理CPU中核心数(可能有 ...

  10. JAVA并行程序基础

    JAVA并行程序基础 一.有关线程你必须知道的事 进程与线程 在等待面向线程设计的计算机结构中,进程是线程的容器.我们都知道,程序是对于指令.数据及其组织形式的描述,而进程是程序的实体. 线程是轻量级 ...