二叉树排序-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,2
		tree.add(1);
		tree.add(8);
		tree.add(6);
		tree.add(3);
		tree.add(5);
		tree.add(2);
		tree.sort();
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值