二叉树排序-Java版本
利用二叉树结构以及遍历方式可以实现基于二叉树的元素排序处理。
首先根据插入元素的大小与根节点大小的比较来构建一颗完整的树。
在构建好二叉树之后,并没有继续排序,所以我们需要使用一个中序遍历,因为中序遍历的顺序是左-根-右
5-8-9-11-12-20,神奇吧,我也觉得是!至于为什么呢?数学原理回头再说吧!
/** 基于二叉树结构实现元素排序处理的排序器*/
public class BinaryTreeSort<E extends Integer> {/** 定义结点类*/class Node<E extends Integer>{private E item; //存放元素private Node left; // 存放左子树地址private Node right; //存放右子树地址//添加构造方法Node(E item){this.item =item;}/** 添加结点*/public void addNode(Node node) {//完成新结点中的元素与当前结点中的元素判断//如果新结点中的元素小于当前节点中的元素,那么新结点则放到当前结点的左子树中if(node.item.intValue()<this.item.intValue()) {//判断是否有左子树if(this.left == null) {this.left = node;}else {this.left.addNode(node); //调用递归}}else {//如果新结点中的元素大于当前节点中的元素,那么新结点则放到当前结点的右子树中if(this.right==null) {this.right = node;}else {this.right.addNode(node);}}}/** 使用中序遍历二叉树*/public void inorderTraversal() {//找到最左侧的那个结点if(this.left!=null) this.left.inorderTraversal();System.out.println(this.item);//找到最右侧的那个结点//在这里使用的是递归的方式,这个中序遍历很重要,自己画一画if(this.right!=null) this.right.inorderTraversal();}}private Node root; //存放树的根节点的地址/** 将元素添加到排序器中*/public void add(E element) {//要牢牢地抓住树的根节点,实例化结点对象Node<E> node = new Node<>(element);//判断当前二叉树中是否有根节点,如果没有,那么新节点则为根节点if(this.root == null) {this.root = node;}else {this.root.addNode(node);}}/** 对元素进行排序*/public void sort() {//判断根节点是否为空if(this.root == null) {return;}else {this.root.inorderTraversal();}}public static void main(String[] args) {BinaryTreeSort<Integer> tree = new BinaryTreeSort<>();//1,8,6,3,5,2tree.add(1);tree.add(8);tree.add(6);tree.add(3);tree.add(5);tree.add(2);tree.sort();}
}
二叉树排序-Java版本相关推荐
- 插入排序算法 java_排序算法实现-插入排序(Java版本)
原标题:排序算法实现-插入排序(Java版本) 插入排序(英语:Insertion Sort)是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到 ...
- 搜索排序LambdaMART中Lambda的计算过程java版本
Lambdajava实现 这里只告诉说明Lambda的计算,后面的mart大家随便用其他的都可以,这里详细写了Lambda是如何计算得来,java版本的实现.代码如下: 样本的格式如下: public ...
- Java 实现二叉树排序和查找
啥都不说了,直接上代码 package com.inter.structure;import java.util.Random;/*** 使用Java实现二叉树排序 二叉树只有一个根节点* * @au ...
- 二叉树排序(java)
package ding1; //二叉树排序import java.util.Scanner; //数组用的是位序!!class A{ void exch(int a[],int i,int j) { ...
- java 文件遍历排序_Java的二叉树排序以及遍历文件展示文本格式的文件树
Java二叉树排序算法排序二叉树的描述也是一个递归的描述, 所以排序二叉树的构造自然也用递归的: 排序二叉树的3个特征: 1:当前node的所有左孩子的值都小于当前node的值: 2:当前node的所 ...
- 三天刷完《剑指OFFER编程题》--Java版本实现(第三天)
正在更新中......... 剑指offer --Python版本的实现: 剑指offer(1/3)第一大部分 剑指offer(2/3)第二大部分 剑指offer(3/3)第三大部分 -------- ...
- 数据结构java版本
文章目录 数据结构java版本 1.Array 2. Stack 3. Queue 4. LinkedList 5. Tree 5.1 树 Tree 5.1.1 二分搜索树 Balanced Bina ...
- 二叉树代码 java面试题_《剑指offer》面试题39 二叉树的深度(java)
摘要: 今天翻到了<剑指offer>面试题39,题目二中的解法二是在函数的参数列表中通过指针的方式进行传值,而java是没有指针的,所以函数要进行改造.然而我翻了下别人的java版本(我就 ...
- 微信公众号开发之服务器接入指南之Java版本
微信公众号开发的官方文档: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319 其中我们开发好的服务器,在配置到 ...
最新文章
- oracle11g与weblogic兼容,WebLogic 10.3.6与JDK 1.7的兼容问题
- 网络编程(part11)--socket模块方法及socket套接字属性
- applet实现大文件ftp上传(一)
- Spring中使用Spark连接的DataSource
- eclipse占用内存过大_idea被评最好用java开发工具,为什么用eclipse的人更多?
- Python中使用PhantomJS抓取Javascript网页数据
- C++重载操作符详解
- tomcat 占用 dos
- 激光雷达lidar标定
- c++ 应输入表达式_【C语言编程入门系列】—— 第五章,C语言基本运算和表达式(一)...
- 揭秘 | Akuna工作体验大揭秘
- 图形 3.6 纹理压缩——包体瘦身术——RGBA与ASTC与ETC2压缩与实际对比体验
- 降雪致国道315线部分道路通行受阻公路交警部门昼夜坚守
- 整理的一些关于手机拍照技巧的内容
- 一个视频发布在三个平台上,可以赚三份收益,自媒体如何发布视频
- rd,pe,ae,fae,marketing,sales都是干嘛的?
- npm install 报错 Error: EACCES: permission denied解决方案
- 走进VR开发世界(4)——走进VR游戏开发的世界
- attach()与detach()的使用
- Skywalking的安装与使用
热门文章
- MoCo中的InfoNCE
- 【转】几种作图软件使用感言
- JDK安装教程(超详细,超简单!)
- WebService --WSDL文档解析
- Dom4j修改xml文件
- 怎样使用JPG转PDF转换器转换图片
- APAP中REFRESH、CLEAR和FREE的区别
- 北邮太极计算机,北京邮电大学2015年高水平运动员体育专项测试武术测试办法及评分标准...
- ModuleNotFoundError: No module named ‘xxx‘可能的解决方案大全
- 6-1 简单实现x的n次方 (7 分)