二叉排序树BST代码(JAVA)
publicclassTest{
publicstaticvoid main(String[] args){
int[] r =newint[]{5,1,3,4,6,7,2,8,9,0};
BST binarySearchTree =new BST(r);
binarySearchTree.inOrder();
System.out.println();
binarySearchTree.searchBST(6);//查找成功
System.out.println();
binarySearchTree.searchBST(10);//查找失败->插入
System.out.println();
}
}
publicclass BST {
//二叉树结点
publicclassBiNode{
int data;
BiNode left;
BiNode right;
BiNode(int data,BiNode left,BiNode right){
this.data = data;
this.left = left;
this.right = right;
}
}
privateBiNode root = null;
BST(int[] r)
{
for(int i =0; i < r.length; i++)
{
BiNode s =newBiNode(r[i],null,null);
root = insertBST(root, s);
// insertBST1(s);
}
}
//插入(递归)
publicBiNode insertBST(BiNode head,BiNode s)
{
if(head == null){
head = s;
return head;
}
if(s.data < head.data)
head.left = insertBST(head.left, s);
else
head.right = insertBST(head.right,s);
return head;
}
//插入(非递归:循环、用临时变量保存过程)
publicvoid insertBST1(BiNode s)
{
if(root == null){
root = s;
return;
}
BiNode temp = 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;
}
}
}
//查找:成功->返回;失败:插入
publicBiNode searchBST(int a)
{
BiNode s1 = searchBST(root,a);
if(s1 == null){
BiNode s2 =newBiNode(a,null,null);
insertBST1(s2);
System.out.println("search fail ; insert success: "+ s2.data);
inOrder();
return s2;
}else{
System.out.println("search success: "+ s1.data);
return s1;
}
}
//查找
privateBiNode searchBST(BiNode head,int a)
{
if(head == null)
return null;
if(a < head.data)
return searchBST(head.left, a);
elseif(a > head.data)
return searchBST(head.right, a);
else
return head;
}
// 删除
// 删除f的孩子p
publicvoid deleteLeftBST(BiNode f,BiNode p)
{
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的左右子树均不空
{
BiNode par = p, s = par.right; //用par s 去查找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;
}
}
}
//先序遍历
publicvoid preOrder(){
System.out.print("preOrder traversal with recursion:");
preOrder(root);
System.out.println();
}
//递归
privatevoid preOrder(BiNode root){
if(root == null)return;
System.out.print(root.data); //访问结点
preOrder(root.left);
preOrder(root.right);
}
//中序遍历
publicvoid inOrder(){
System.out.print("inOrder traversal with recursion:");
inOrder(root);
System.out.println();
}
//递归
privatevoid inOrder(BiNode root){
if(root == null)//访问结点
return;
inOrder(root.left);
System.out.print(root.data); //访问结点
inOrder(root.right);
}
//后序遍历
publicvoid postOrder(){
System.out.print("postOrder traversal with recursion:");
postOrder(root);
System.out.println();
}
//递归
privatevoid postOrder(BiNode root){
if(root == null)return;
postOrder(root.left);
postOrder(root.right);
System.out.print(root.data); //访问结点
}
}
inOrder traversal with recursion:0123456789
search success:6
search fail ; insert success:10
inOrder traversal with recursion:012345678910
二叉排序树BST代码(JAVA)的更多相关文章
- 二叉排序树(BST)创建,删除,查找操作
binary search tree,中文翻译为二叉搜索树.二叉查找树或者二叉排序树.简称为BST 一:二叉搜索树的定义 他的定义与树的定义是类似的,也是一个递归的定义: 1.要么是一棵空树 2.如果 ...
- Atitit.http代理的实现 代码java php c# python
Atitit.http代理的实现 代码java php c# python 1. 代理服务器用途 代理服务器看成是一种扩展浏览器功能的途径.例如,在把数据发送给浏览器之前,可以用代理服务器压缩数据 调 ...
- 二叉排序树(BST)构造与应用
二叉排序树(BST)构造与应用 本文取自<数据结构与算法>(C语言版)(第三版).出版社是清华大学出版社. 本博文作为学习资料整理. 源码是VC+ ...
- 分页 工具类 前后台代码 Java JavaScript (ajax) 实现 讲解
[博客园cnblogs笔者m-yb原创, 转载请加本文博客链接,笔者github: https://github.com/mayangbo666,公众号aandb7,QQ群927113708]http ...
- Java数据结构和算法(五)二叉排序树(BST)
Java数据结构和算法(五)二叉排序树(BST) 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 二叉排序树(Binary S ...
- stl文件格式解析代码--java版
代码是参考three.js中的stlLoader.js写的. 需要注意的地方,java中byte取值-128~127 package test_stl.test_entry; import java. ...
- n皇后2种解题思路与代码-Java与C++实现
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要讲了n皇后问题的解题思路,并分别用java和c++实现了过程,最后,对于算法改进 ...
- 如何写出无法维护的代码(JAVA版)
程序命名(针对那些不能混淆的代码) 容易输入的名字.比如:Fred,asdf 单字母的变量名.比如:a,b,c, x,y,z,或者干脆上中文比如(阿隆索肯德基) 有创意地拼写错误.比如:SetPint ...
- [改善Java代码]Java的泛型是类型擦除的
泛型可以减少强制类型的转换,可规范集合的元素类型,还可以提高代码的安全性和可读性,正是因为有了这些优点,自从Java引入泛型之后,项目的编码规则上便多了一条,优先使用泛型. Java泛型(Generi ...
随机推荐
- java事件监听机制(自定义事件)
java中的事件机制的参与者有3种角色: 1.event object:事件状态对象,用于listener的相应的方法之中作为参数,一般存在与listerner的方法之中 2.event source ...
- 安装 php-gd
安装cmd提示不支持GD模块,不能使用缩略图功能,需要安装php-gd 1.安装 php-gd yum list php-gd yum install php-gd 2.重启 httpd servic ...
- sql -实验二
8. 统计各部门下工资大于2000的雇员的平均工资. select avg(sal)from empwhere sal>2000;
- 35 Search Insert Position(找到数的位置Medium)
题目意思:在递增数组中找到目标数的位置,如果目标数不在数组中,返回其应该在的位置. 思路:折半查找,和相邻数比较,注意边界 class Solution { public: int searchIns ...
- $_CFG = load_config(); /* 载入系统参数 */
ecshop 中$_CFG数组主要是放置一些系统参数,并且全站共享的数据,在使用的时候,ecshop里面常常以$GLOBALS['_CFG']全局变量的模式来处理. ecshop 的$GLOBALS[ ...
- MLlib-分类与回归
MLlib支持二分类,多酚类和回归分析的多种方法,具体如下: 问题类别 支持方法 二分类 线性支持向量机, 逻辑回归,决策树,朴素贝叶斯 多分类 决策树,朴素贝叶斯 回归 线性最小二乘,Lasso,r ...
- 关于Chrome(谷歌浏览器)对docume,准确获取网页客户区的宽高、滚动条宽高、滚动条Left和Top
对于document.compatMode,很多朋友可能都根我一样很少接触,知道他的存在却不清楚他的用途.今天在ext中看到 document.compatMode的使用,感觉这个对于我们开发兼容性的 ...
- DNS解析原理
1.在浏览器中输入www.qq.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析. 2.如果hosts里没有这个域名的映射,则 ...
- PHP 5.6正式发布:新特性、及功能改进介绍
经过了长时间的开发测试,新版本PHP程序(PHP5.6正式版)终于发布了.新版本中加入了一些实用的新特性,也摒弃了一些冗余的功能.同时,也对部分原有功能进行了改进.下面就一起看看PHP 5.6正式版到 ...
- 转:Hprose for php(二)——服务器
文章来自于:http://blog.csdn.net/half1/article/details/21252879 本文将介绍Hprose for php服务器的更多细节 1.发布服务 Hprose提 ...