二叉排序树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 ...
随机推荐
- 重新开始学习javase_集合_Map
一,Map之HashMap(转:http://blog.csdn.net/zheng0518/article/details/42197049) 1. HashMap概述: HashMap是基于 ...
- 开始编写正式的iOS 程序(iOS编程指导)
App设计基础 在确定了你的App主要功能后,需要把它转化为代码.如果你是第一次开发属于自己的iOS App,需要花些时间熟悉基本概念.iOS内置了很多设计样式,多了解下能对你以后有帮助. 初稿 设计 ...
- Zsh安装CMake补全脚本进行CMake命令补全
最近在尝试使用Zsh,发现其补全命令的功能相当厉害.但对CMake命令的补全在默认的5.0.5中好像没有看到,网上找了下关于配置Zsh补全的文章也没有多少. 于是自己动手,发现在Zsh安装目录 ...
- jquery选择器专题
$(“p”).addClass(css中定义的样式类型); 给某个元素添加样式$(“img”).attr({src:”test.jpg”,alt:”test Image”}); 给某个元素添加属性/值 ...
- 无法解析属性“mode”的值。错误为: 枚举值必须是以下各值中的一个: RemoteOnly, On, Off。
Off首字母要大写,注意大小写 <customErrors mode="Off"> <error statusCode="404" ...
- Django - staticfiles,STATIC_ROOT, STATIC_URL,STATICFILES_DIRS
staticfiles:这是一个静态资源管理的app,django.contrib.staticfiles.老的版本中,静态资源管理一直是一个问题,部分app发布的时候需要带上静态资源,在部署的时候必 ...
- maven3.0
Maven入门教程 1.1. 介绍.环境配置 1.1.1. Maven介绍 Maven是一个采用纯Java编写的开源项目管理工具, Maven采用了一种被称之为Project Object Model ...
- UI基础 - UILabel
//根据文字获取size - (CGSize)getSizeWithstring:(NSString *)string { CGSize maxSize = CGSizeMake(320, 320); ...
- Jest
http://www.ibm.com/developerworks/cn/java/j-javadev2-24/
- 14.4.1 Buffer Pool
14.4.1 Buffer Pool buffer pool 是一个主人的内存区域 InnoDB caches 表和index 数据. buffer pool 允许经常访问的数据直接从内存里处理,加快 ...