java二叉树排序实现
原创:转载请注明出处
目的:想用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二叉树排序实现的更多相关文章
- java 二叉树排序
1 class BinaryTree{ 2 class Node{ 3 private Comparable data; 4 private Node left; 5 private Node rig ...
- Java基础知识强化58:经典排序之二叉树排序(BinaryTreeSort)
1. 二叉树排序 二叉树排序的描述也是一个递归的描述, 所以二叉树排序的构造自然也用递归的: 二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它 ...
- Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法
Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...
- Java 常用排序算法/程序员必须掌握的 8大排序算法
Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配 ...
- java各种排序实现
排序是程序开发中一种非常常见的操作,对一组任意的数据元素(或记录)经过排序操作后,就可以把他们变成一组按关键字排序的有序队列. 对一个排序算法来说,一般从下面3个方面来衡量算法的优劣: 时间复杂度:它 ...
- Java常用排序算法及性能测试集合
测试报告: Array length: 20000 bubbleSort : 573 ms bubbleSortAdvanced : 596 ms bubbleSortAdvanced2 : 583 ...
- Java各种排序算法
Java各种排序算法详解 排序大的分类可以分为两种:内排序和外排序.在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序.下面讲的排序都是属于内排序. 内排序有 ...
- java 集合排序(转)
Java API针对集合类型排序提供了两种支持:java.util.Collections.sort(java.util.List)java.util.Collections.sort(java.ut ...
- java:高速排序算法与冒泡排序算法
Java:高速排序算法与冒泡算法 首先看下,冒泡排序算法与高速排序算法的效率: 例如以下的是main方法: /** * * @Description: * @author:cuiyaon ...
随机推荐
- 枚举1--求小于n的最大素数
枚举1--求小于n的最大素数 总结: 素数是不能被比它小的素数整除. /* 枚举就是基于已有知识镜像答案猜测的一种问题求解策略 问题:求小于n的最大素数 分析: 找不到一个数学公式,使得根据N就可以计 ...
- English trip -- VC(情景课)9 C What are they doing? 他们在做什么?
Grammar focus 语法点: 以What 开头的问句 What is/is/are he/she/they doing? Cutting the grass. Walking the dog. ...
- win10 自己DIY的arp绑定小脚本
@echo off&mode con cols=80 lines=22&title ARP_bind Tools setlocal enabledelayedexpansion rem ...
- php--------使用js生成二维码
php生成二维码有多种方式,可以在JS中,也可以使用php库,今天写的这个小案例是使用JS生成二维码. 其他方式可以看下一篇文章:php--------php库生成二维码和有logo的二维码 网站开发 ...
- Android动画(Animations)
动画类型Android的animation由四种类型组成 XML中 alpha : 渐变透明度动画效果 scale :渐变尺寸伸缩动画效果 translate : 画面转换位置移动动画效果 ro ...
- Confluence 6 导入 Active Directory 服务器证书 - Mac OS X
为了让你的应用服务器能够信任你的目录服务器.你目录服务器上导出的证书需要导入到你应用服务器的 Java 运行环境中.JDK 存储了信任的证书,这个存储信任证书的文件称为一个 keystore.默认的 ...
- 【转】Vue.js特点
作为一名Vue.js的忠实用户,我想有必要写点文章来歌颂这一门美好的语言了,我给它的总体评价是“简单却不失优雅,小巧而不乏大匠”,下面将围绕这句话给大家介绍Vue.js,希望能够激发你对Vue.js的 ...
- homestead 暴露接口到外网
laravel 官方推荐的运行环境是homestead,但homestead是个虚拟机,你自己访问没问题,给别人联调怎么办? 一个大型项目肯定不止一个人开发,这个时候就需要将你虚拟机上的接口暴露给外网 ...
- UVA-10689 Yet another Number Sequence (矩阵二分幂模板)
题目大意:已知递推公式和边缘值,求某项的最后m(0<m<5)位数字. 题目分析:矩阵二分幂的模板题. 代码如下: # include<iostream> # include&l ...
- spting Boot 创建一个springBoot项目
spting Boot 创建一个springBoot项目 1)学习springBoot使用软件:IDEA软件(前面的文章有安装idea的过程). 也可以使用另一种方法在https://start.sp ...