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搞定面试中的二叉树题目
package BinaryTreeSummary; import java.util.ArrayList; import java.util.Iterator; import java.util.L ...
- 浅谈在java中list集合的排序问题
定义实体类: public class Person { private Integer id; private String name; private Integer age; public In ...
- java中的集合/容器的数据结构
最近双11在网上买了本 数据结构和算法--java语言实现,正在啃,同时在慕课网上的学习进度来到了集合框架这一类,对于这一块算是刚刚了解,本科的时候数据结构学习的是严蔚敏老师的那本数据结构,代码的实现 ...
- java中的23中设计模式(转)
设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- java中的数据结构(集合|容器)
对java中的数据结构做一个小小的个人总结,虽然还没有到研究透彻jdk源码的地步.首先.java中为何需要集合的出现?什么需求导致.我想对于面向对象来说,对象适用于描述任何事物,所以为了方便对于对象的 ...
- java中的23中设计模式(转载的,有时间一定要熟读)
设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- Java中List Set Map 是否有序等总结
1.Collection List Set Map 区别记忆 这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面的差异,见上一篇相关文 ...
- java中treemap和treeset实现(红黑树)
java中treemap和treeset实现(红黑树) TreeMap 的实现就是红黑树数据结构,也就说是一棵自平衡的排序二叉树,这样就可以保证当需要快速检索指定节点. TreeSet 和 Tre ...
- 利用Java实现表达式二叉树
(*^-^*) 什么是二叉树,这里不再介绍,可以自行百度:二叉树.在这里利用java实现“表达式二叉树”. 表达式二叉树的定义 第一步先要搞懂表达式二叉树是个什么东东?举个栗子,表达式:(a+b×(c ...
随机推荐
- Linux下自动化监控内存、存储空间!
距离上一次更新文章已经过去一段时间了,小编在这段时间因为一些琐事,加上身体生病不能及时更新文章,今天身体逐渐恢复就急忙来更新文章,今天思梦给大家带来的就是如何自动化监控我们的服务器一些基本的配置来保证 ...
- django命令(笔记,自己看的)
新建一个项目,名字为mysite:django-admin.py startproject mysite 新建一个应用App,名字为apppython manage.py startapp learn ...
- eclipse安装java web插件
1 查看eclipse版本 找到eclipse的安装目录,找到readme文件,打开其中的html文件,我的是4.6版本的,代号是oxygen 2 安装 打开eclipse,点击help-Instal ...
- Progressive Web Applications
Progressive Web Applications take advantage of new technologies to bring the best of mobile sites an ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题&&学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 9894 Solved: 4561[Subm ...
- 2017广东工业大学程序设竞赛C题爬楼梯
Description 小时候,我只能一阶一阶得爬楼梯, 后来,我除了能一次爬一阶,还可以一次爬两阶, 到现在,我最多一次可以爬三阶. 那么现在问题来了,我想爬上n层楼,相邻楼层之间有一段楼梯,虽然我 ...
- Travelling(spfa+状态压缩dp)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3001 Travelling Time Limit: 6000/3000 MS (Java/Others ...
- 通过Git Gui Here上传本地项目到GitHub上
要使用此种方法上传本地项目到GitHub上,前提得是你已安装Git for window工具. Git for window下载地址:http://www.xp510.com/xiazai/Appli ...
- Python 之 基础知识(三)
一.函数 def 函数名(): 函数封装的代码 ... def是英文define缩写 别的Python文件可以引入 调用 定义时 和其他代码包括注释保留两个空行 pycharm 调试时 F8 Step ...
- EhCache 在集群环境中使用缓存系统
EhCache 分布式缓存/缓存集群 EhCache提供了很多种解决方案 这里只介绍一种最常用而且简单的RMI方式分布式缓存决绝方案 Automatic Peer Discovery 自动成员发现方 ...