利用二叉树结构以及遍历方式可以实现基于二叉树的元素排序处理。

首先根据插入元素的大小与根节点大小的比较来构建一颗完整的树。

在构建好二叉树之后,并没有继续排序,所以我们需要使用一个中序遍历,因为中序遍历的顺序是左-根-右

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版本相关推荐

  1. 插入排序算法 java_排序算法实现-插入排序(Java版本)

    原标题:排序算法实现-插入排序(Java版本) 插入排序(英语:Insertion Sort)是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到 ...

  2. 搜索排序LambdaMART中Lambda的计算过程java版本

    Lambdajava实现 这里只告诉说明Lambda的计算,后面的mart大家随便用其他的都可以,这里详细写了Lambda是如何计算得来,java版本的实现.代码如下: 样本的格式如下: public ...

  3. Java 实现二叉树排序和查找

    啥都不说了,直接上代码 package com.inter.structure;import java.util.Random;/*** 使用Java实现二叉树排序 二叉树只有一个根节点* * @au ...

  4. 二叉树排序(java)

    package ding1; //二叉树排序import java.util.Scanner; //数组用的是位序!!class A{ void exch(int a[],int i,int j) { ...

  5. java 文件遍历排序_Java的二叉树排序以及遍历文件展示文本格式的文件树

    Java二叉树排序算法排序二叉树的描述也是一个递归的描述, 所以排序二叉树的构造自然也用递归的: 排序二叉树的3个特征: 1:当前node的所有左孩子的值都小于当前node的值: 2:当前node的所 ...

  6. 三天刷完《剑指OFFER编程题》--Java版本实现(第三天)

    正在更新中......... 剑指offer --Python版本的实现: 剑指offer(1/3)第一大部分 剑指offer(2/3)第二大部分 剑指offer(3/3)第三大部分 -------- ...

  7. 数据结构java版本

    文章目录 数据结构java版本 1.Array 2. Stack 3. Queue 4. LinkedList 5. Tree 5.1 树 Tree 5.1.1 二分搜索树 Balanced Bina ...

  8. 二叉树代码 java面试题_《剑指offer》面试题39 二叉树的深度(java)

    摘要: 今天翻到了<剑指offer>面试题39,题目二中的解法二是在函数的参数列表中通过指针的方式进行传值,而java是没有指针的,所以函数要进行改造.然而我翻了下别人的java版本(我就 ...

  9. 微信公众号开发之服务器接入指南之Java版本

    微信公众号开发的官方文档: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319 其中我们开发好的服务器,在配置到 ...

最新文章

  1. oracle11g与weblogic兼容,WebLogic 10.3.6与JDK 1.7的兼容问题
  2. 网络编程(part11)--socket模块方法及socket套接字属性
  3. applet实现大文件ftp上传(一)
  4. Spring中使用Spark连接的DataSource
  5. eclipse占用内存过大_idea被评最好用java开发工具,为什么用eclipse的人更多?
  6. Python中使用PhantomJS抓取Javascript网页数据
  7. C++重载操作符详解
  8. tomcat 占用 dos
  9. 激光雷达lidar标定
  10. c++ 应输入表达式_【C语言编程入门系列】—— 第五章,C语言基本运算和表达式(一)...
  11. 揭秘 | Akuna工作体验大揭秘
  12. 图形 3.6 纹理压缩——包体瘦身术——RGBA与ASTC与ETC2压缩与实际对比体验
  13. 降雪致国道315线部分道路通行受阻公路交警部门昼夜坚守
  14. 整理的一些关于手机拍照技巧的内容
  15. 一个视频发布在三个平台上,可以赚三份收益,自媒体如何发布视频
  16. rd,pe,ae,fae,marketing,sales都是干嘛的?
  17. npm install 报错 Error: EACCES: permission denied解决方案
  18. 走进VR开发世界(4)——走进VR游戏开发的世界
  19. attach()与detach()的使用
  20. Skywalking的安装与使用

热门文章

  1. MoCo中的InfoNCE
  2. 【转】几种作图软件使用感言
  3. JDK安装教程(超详细,超简单!)
  4. WebService --WSDL文档解析
  5. Dom4j修改xml文件
  6. 怎样使用JPG转PDF转换器转换图片
  7. APAP中REFRESH、CLEAR和FREE的区别
  8. 北邮太极计算机,北京邮电大学2015年高水平运动员体育专项测试武术测试办法及评分标准...
  9. ModuleNotFoundError: No module named ‘xxx‘可能的解决方案大全
  10. 6-1 简单实现x的n次方 (7 分)