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

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

建立完二叉排序树之后,对整个二叉树进行中序遍历,便得到有序的数列。

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);

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值