您的位置:首页 > 编程语言 > Java开发

二叉排序树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


来自为知笔记(Wiz)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: