二叉树排序----基于比较器排序原理
前言
实际上Comparable接口的比较器排序也就是数据结构中的二叉树排序算法,先通过构建排序二叉树,之后根据中序遍历将结果读出来,即为排序的结果。
如有小伙伴还未接触数据结构和排序二叉树,请先学习关于二叉树的知识哦!
案例演示
基于Comparable接口实现的二叉树操作(Student类在上篇文章中定义有哦)
package chapter_eleven;
//定义排序二叉树类,本类中有排序二叉树的根节点,增加结点方法,输出排序结果方法
class BinaryTree{
private Node root; //定义排序二叉树的根节点
public void add(Comparable data){ //定义为二叉树增加节点的方法,此节点必须为实现Comparable接口的类
Node node = new Node(); //实例化一个二叉树结点
node.data = data; //将此对象作为二叉树结点的数据
if(root == null){ //若根节点为null,则将此节点先添加至根节点
root = node;
}else{
root.addNode(node); //否则将此节点添加到排序二叉树中
}
}
public void print(){ //定义输出排序二叉树的方法
this.root.printNode(); //使用中序遍历排序二叉树,输出排序结果
}
class Node{ //定义排序二叉树的节点类,此类为内部类
private Comparable data; //节点数据,利用对象多态性的向上转型,Comparable接口子类均可为其实例化
private Node left; //节点的左子树
private Node right; //节点的右子树
/**
* //定义为排序二叉树添加节点的方法
* @param node
*/
public void addNode(Node node){
if(node.data.compareTo(this.data) < 0){ //使用compareTo()方法对增加节点与根节点进行比较,若小于0添加左子树
if(this.left == null){ //左子树无根则直接添加
this.left = node;
}else{
this.left.addNode(node); //否则将此节点直接添加至左子树
}
}
if(node.data.compareTo(this.data) >= 0){ //使用compareTo()方法对增加节点与根节点进行比较,大于等于0添加右子树
if(this.right == null){
this.right = node; //右子树无根则直接添加
}else{
this.right.addNode(node); //否则将此节点添加至右子树
}
}
}
/**
* 定义中序遍历排序二叉树的方法,以排序的方式打印所有信息
*/
public void printNode(){
if(this.left != null){ //先遍历左子树
this.left.printNode(); //递归遍历左子树
}
System.out.print(this.data); //遍历根节点
if(this.right != null){ //遍历右子树
this.right.printNode(); //递归遍历右子树
}
}
}
}
public class ComparableDemo03 {
public static void main(String[] args) {
BinaryTree binaryTree = new BinaryTree(); //声明并实例化排序二叉树
binaryTree.add(new Student("张三",20,90.0f)); //为排序二叉树添加节点
binaryTree.add(new Student("李四", 21, 90.0f)); //实现Comparable接口的类均可以添加
binaryTree.add(new Student("王五", 20, 99.0f));
binaryTree.add(new Student("赵六", 20, 70.0f));
binaryTree.add(new Student("孙七", 22, 100.0f));
System.out.println("排序之后的结果:");
binaryTree.print(); //输出排序的结果
}
}
运行结果
排序之后的结果:
{name='孙七', age=22, score=100.0}
{name='王五', age=20, score=99.0}
{name='张三', age=20, score=90.0}
{name='李四', age=21, score=90.0}
{name='赵六', age=20, score=70.0}
总结
使用Comparable比较器的接口可以方便的定义类对象的排序规则,结合数据结构算法可以很好的实现排序算法,哈哈哈,对于此二叉树排序算法,小伙伴们理解即可,因为java中已经提供了对数据结构算法的支持类库类集,会使用开发即可,加油,冲冲冲!