代码实例:
package tree;
?
/**
* 基于二叉树结构实现排序的排序器
*/
?
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; ?//存放根节点
?
? ?/**
? ? * 添加元素到排序器中的方法
? ? * @param element
? ? */
? ?public void add(E element){
? ? ? ?//实例化结点对象
? ? ? ?Node<E> node = new Node<>(element);
? ? ? ?//将将结点添加到二叉树
? ? ? ?if (this.root == null) ?//判断是否为空树
? ? ? ? ? ?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> binaryTreeSort = new BinaryTreeSort<>();
? ? ? ?binaryTreeSort.add(20);
? ? ? ?binaryTreeSort.add(3);
? ? ? ?binaryTreeSort.add(9);
? ? ? ?binaryTreeSort.add(7);
? ? ? ?binaryTreeSort.add(4);
? ? ? ?binaryTreeSort.sort();
? }
?
}
运行结果
3 4 7 9 20
|