二叉排序树BST代码(JAVA)
2016-05-27 16:24
555 查看
publicclassTest{
publicstaticvoidmain(String[]args){
int[]r=newint[]{5,1,3,4,6,7,2,8,9,0};
BSTbinarySearchTree=newBST(r);
binarySearchTree.inOrder();
System.out.println();
binarySearchTree.searchBST(6);//查找成功
System.out.println();
binarySearchTree.searchBST(10);//查找失败->插入
System.out.println();
}
}
publicclassBST{
//二叉树结点
publicclassBiNode{
intdata;
BiNodeleft;
BiNoderight;
BiNode(intdata,BiNodeleft,BiNoderight){
this.data=data;
this.left=left;
this.right=right;
}
}
privateBiNoderoot=null;
BST(int[]r)
{
for(inti=0;i<r.length;i++)
{
BiNodes=newBiNode(r[i],null,null);
root=insertBST(root,s);
//insertBST1(s);
}
}
//插入(递归)
publicBiNodeinsertBST(BiNodehead,BiNodes)
{
if(head==null){
head=s;
returnhead;
}
if(s.data<head.data)
head.left=insertBST(head.left,s);
else
head.right=insertBST(head.right,s);
returnhead;
}
//插入(非递归:循环、用临时变量保存过程)
publicvoidinsertBST1(BiNodes)
{
if(root==null){
root=s;
return;
}
BiNodetemp=root;//需要临时结点记录
while(true)
{
if(s.data<temp.data)
{
if(temp.left==null)
{
temp.left=s;
return;
}
temp=temp.left;
}
else
{
if(temp.right==null)
{
temp.right=s;
return;
}
temp=temp.right;
}
}
}
//查找:成功->返回;失败:插入
publicBiNodesearchBST(inta)
{
BiNodes1=searchBST(root,a);
if(s1==null){
BiNodes2=newBiNode(a,null,null);
insertBST1(s2);
System.out.println("searchfail;insertsuccess:"+s2.data);
inOrder();
returns2;
}else{
System.out.println("searchsuccess:"+s1.data);
returns1;
}
}
//查找
privateBiNodesearchBST(BiNodehead,inta)
{
if(head==null)
returnnull;
if(a<head.data)
returnsearchBST(head.left,a);
elseif(a>head.data)
returnsearchBST(head.right,a);
else
returnhead;
}
//删除
//删除f的孩子p
publicvoiddeleteLeftBST(BiNodef,BiNodep)
{
if(p.left==null&&p.right==null)//p为叶子
{
f.left=null;
p=null;
}
elseif(p.right==null)//p只有左子树
{
f.left=p.left;
p=null;
}
elseif(p.left==null)//p只有右子树
{
f.left=p.right;
p=null;
}
else//p的左右子树均不空
{
BiNodepar=p,s=par.right;//用pars去查找p的右子树的最左下结点
while(s.left!=null)
{
par=s;
s=par.left;
}
p.data=s.data;//交换最左下结点s与p结点数据
//剪枝(删除s结点)
if(par==p)//处理特殊情况
{
par.right=s.right;
s=null;
}
else//处理一般情况
{
par.left=s.right;
s=null;
}
}
}
//先序遍历
publicvoidpreOrder(){
System.out.print("preOrdertraversalwithrecursion:");
preOrder(root);
System.out.println();
}
//递归
privatevoidpreOrder(BiNoderoot){
if(root==null)return;
System.out.print(root.data);//访问结点
preOrder(root.left);
preOrder(root.right);
}
//中序遍历
publicvoidinOrder(){
System.out.print("inOrdertraversalwithrecursion:");
inOrder(root);
System.out.println();
}
//递归
privatevoidinOrder(BiNoderoot){
if(root==null)//访问结点
return;
inOrder(root.left);
System.out.print(root.data);//访问结点
inOrder(root.right);
}
//后序遍历
publicvoidpostOrder(){
System.out.print("postOrdertraversalwithrecursion:");
postOrder(root);
System.out.println();
}
//递归
privatevoidpostOrder(BiNoderoot){
if(root==null)return;
postOrder(root.left);
postOrder(root.right);
System.out.print(root.data);//访问结点
}
}
输出:
inOrdertraversalwithrecursion:0123456789
searchsuccess:6
searchfail;insertsuccess:10
inOrdertraversalwithrecursion:012345678910
相关文章推荐
- JAVA学习(10) 继承(1)
- java中ThreadPoolExecutor线程池的使用
- Base64Utils 在Java后台的扩展
- Java集合类详解
- 二叉树(二叉链表实现)JAVA代码
- Java 比较两个字符串的大小
- Eclipse SVN文件冲突及不能直接提交情况
- Java中vector的使用详解
- JAVA 程序设置运行内存
- 队列(链式存储)JAVA代码
- AAA Spring AOP原理及拦截器(aop配置最简单例子)
- java 内存模型
- JAVA学习(9)jar打包
- 28. SpringMVC_重定向
- Spring之ContextLoaderListener的作用
- maven internal error: java.lang.NullPointerException
- java反射机制
- 如何阅读开源代码(spring-framework,jfinal两个项目为例)
- Mycelipse异常:Could not create the view: An unexpected exception was thrown
- Java 教程