二叉排序树的建立与查询的Java实现

本文介绍了一种使用二叉排序树进行数据排序的方法。文章详细解释了如何通过比较节点值来决定新元素的插入位置,并展示了如何利用中序遍历来获取已排序的数据序列。此外,还提供了查找特定元素的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二叉排序树是的数据结构是一个有序的二叉树,在建立二叉排序树的时候便进行了有序化。其中要插入的元素大于当前节点,则向右,否则向左,直到当前节点的左孩子或者右孩子为空,则插入该节点。。
建立完二叉排序树之后,对整个二叉树进行中序遍历,便得到有序的数列。
public class BinaryTreeSort {

	BinaryNode root;//二叉排序树的根节点
	public BinaryTreeSort()//二叉排序树的初始化
	{
		root=null;
	}
	void insert(int elem)//向二叉排序树里面插入元素,同时进行排序
	{
		BinaryNode node=new BinaryNode(elem);//新建节点
		int i=-1;
		if(root==null)//第一次插入的情况
		{
			root=node;
		}
		else
		{
			BinaryNode p=root;
			while(p!=null)//插入节点
			{
				if(compare(p.getData(),elem)==1)//当前节点大于所要插入的元素,则往左
				{
					if(p.lchild!=null)//左孩子不为空
						p=p.lchild;
					else//否则跳出当前循环,
					{
						i=1;
						break;
					}
				}
				else                     //否则往右
				{
					if(p.rchild!=null)//右孩子不为空
						p=p.rchild;
					else//否则跳出当前循环,
					{
						i=0;
						break;
					}
				}
			}
			if(i==1)//在右孩子插入当前节点
			p.lchild=node;
			else if(i==0)//在左孩子插入当前节点
				p.rchild=node;
		}
	}
	
	boolean find(int data)//查找元素
	{
		BinaryNode p=root;
		while(p!=null)
		{
			int i=compare(p.getData(),data);
			if(i==0)//如果i==0,则找到
			{
				System.out.println("find it");
				return true;
			}		
			else if(i==1)//如果当前节点大于寻找的节点,则向右
				p=p.rchild;
			else		//否则向左
				p=p.lchild;
		}
		System.out.println("Not Find");//否则没有找到
		return false;
	}
	void InorderTravel()
	{
		travel(root);
	}
	
	void travel(BinaryNode T)//中序遍历二叉树,得到有序的数
	{
		if(T!=null)
		{
			travel(T.lchild);
			System.out.println(T.getData()+" ");
			travel(T.rchild);
		}
	}
	
	public int compare(int a,int b)
	{
		if(a>b)
			return 1;
		else if(a==b)
			return 0;
		else
			return - 1;
	}
	
	public class BinaryNode//定义二叉树节点的数据结构
	{	
		BinaryNode lchild;//左孩子
		BinaryNode rchild;//右孩子
		int data;//数据域
		public BinaryNode(int dat)
		{
			data=dat;
			lchild=null;
			rchild=null;
		}
		public BinaryNode getLchild() {
			return lchild;
		}
		public void setLchild(BinaryNode lchild) {
			this.lchild = lchild;
		}
		public BinaryNode getRchild() {
			return rchild;
		}
		public void setRchild(BinaryNode rchild) {
			this.rchild = rchild;
		}
		public int getData() {
			return data;
		}
		public void setData(int data) {
			this.data = data;
		}

	}

	public static void main(String[] args) {
		
		
		BinaryTreeSort tree=new BinaryTreeSort();
		tree.insert(4);
		tree.insert(5);
		tree.insert(1);
		tree.insert(0);
		tree.insert(8);
		tree.insert(10);
		tree.insert(3);
		tree.InorderTravel();
		tree.find(10);
		
	}
	
	
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值