二叉排序树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
转载于:https://www.cnblogs.com/Doing-what-I-love/p/5535069.html
二叉排序树BST代码(JAVA)相关推荐
- 二叉排序树(BST)构造与应用
二叉排序树(BST)构造与应用 本文取自<数据结构与算法>(C语言版)(第三版).出版社是清华大学出版社. 本博文作为学习资料整理. 源码是VC+ ...
- java ajax翻页_分页 工具类 前后台代码 Java JavaScript (ajax) 实现 讲解
[博客园cnblogs笔者m-yb原创, 转载请加本文博客链接,笔者github: https://github.com/mayangbo666,公众号aandb7,QQ群927113708] htt ...
- html插入精灵,帮助插入超链接到CSS精灵代码..Java? HTML?
在CS5中使用内置的Javascript来完成滚动图像非常简单,但是,我需要基于CSS来执行此操作.帮助插入超链接到CSS精灵代码..Java? HTML? 我已经设法让代码工作和精灵都很好,但我似乎 ...
- 计算机毕业设计-驾考管理系统(项目+文档)驾校考试管理系统代码java项目
计算机毕业设计-驾考管理系统(项目+文档)驾校考试管理系统代码java项目 注意:该项目只展示部分功能,如需了解,评论区咨询即可. 作者:IT跃迁谷 1.开发环境 开发语言:Java 框架:SSM(S ...
- 课程设计-基于SSM的美容美发造型预约管理系统代码Java理发剪发设计造型系统vue美发店管理系统
课程设计-基于SSM的美容美发造型预约管理系统代码Java理发剪发设计造型系统vue美发店管理系统 注意:该项目只展示部分功能,如需了解,评论区咨询即可. 1.开发环境 开发语言:Java 后台框架: ...
- java 编码 正弦计算器_计算器完整代码(java).doc
计算器完整代码(java) 1. Calculator 类 import java.applet.*; import java.awt.*; import java.awt.event.*; impo ...
- Java聊天室程序源码 Java即时通讯代码 Java局域网聊天系统 Java即时通讯 Java聊天系统
Java聊天室程序源码 Java即时通讯代码 Java局域网聊天系统 Java即时通讯 Java聊天系统 public Swingtest002() {// 设置标题setTitle("请 ...
- 第一行代码 java 光盘_如何买卖光盘附带的数字电影代码
第一行代码 java 光盘 At the moment, we're in a transition to an all-digital world of entertainment, and we' ...
- 圣诞快乐java代码,java版的下雪,大家圣诞快乐
everybody, Merry Christmas ! 里面有播放音乐,太大了上传不了,想看效果的把播放音乐的代码注释掉就好了. 不好意思,图片忘记了,现补上了,不过图片是网上随便找的图扣的,不是很 ...
- 最简判断闰年java代码,java判断闰年代码
java判断闰年代码 java教程网[简单的一道题--用if-else 语句判断某年份是否为闰年]代码如下: package com.wenzhi;O网页链接 Python 代码:(java类似,算法 ...
最新文章
- 移动端图形化报表界面设计_B端移动设计 | 客户RFM分析
- json.dumps直接保存中文而非字符集的方法
- 微软:明明修复了Bug,你们还把我骂上热搜?
- MyBatis嵌套查询解析
- Centos系列 Curl error (37): Couldn‘t read a file:// file for file:///etc/pki/rpm-gpg/RPM-GPG-KEY-XXXX
- mysql 数据转换dataset_【转】dataset和实体类 之间的转换
- 目标检测(Object Detection)的整理
- struts2 s:file标签使用及文件上传例子
- OpenDDS系列(1) —— OpenDDS 简介
- 现代检测技术-测量误差和处理
- 论坛.newreply.php,discuz!论坛帖、删帖加减金钱值后台设定For D25sp1 4.3日整理版
- 2021-2027全球与中国厨房工作台安装服务市场深度研究分析报告
- 手把手带你爬天猫,获取杜蕾斯评论数据
- 算法——从9个硬币中找出其中的1枚假硬币
- 【OpenPCDet】Kitti数据集下训练PointPillars并评估可视化
- 一个关于家具的横幅广告
- 面试java想要高工资的看这里
- linux--- 连接数据库
- python编程基础知识入门
- 神经网络预测结果都一样,神经网络预测结果分析