二叉排序树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);elsehead.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);elsereturn head;}// 删除// 删除f的孩子ppublicvoid 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:0123456789search success:6search fail ; insert success:10inOrder 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 ...
随机推荐
- JavaScript_数组
/** * 数组本身也是对象 * js中数组类似于java里的map容器 长度可随意改变 ,元素类型任意 * */ // var arr = new Array(); // var arr = [1, ...
- php面向对象编程--学习笔记
1.声明一个类 在php中使用class关键字创建一个新类,类包括属性与方法.语法格式如下: <?php class类名{ 属性: 方法: } ?> 2.创建一个实例对象 创建对象的过程称 ...
- 2014 青年歌手大赛 AC
青年歌手大奖赛_评委会打分 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- lua curl动态链接库编译安装(二)
下面再介绍一下lua-curl中的lua-curl-0.2.tar.gz版本的安装方法,可能对于一般的人来说这个很简单,但是对于我们这些菜鸟来说就不一样了: # wget http://files.l ...
- 简述Seesion和Cookie
1.0 为什么需要session和cookie? 当用户在发送一个请求关得到返回信息之后,客户端与服务器端之间的网络连接就已经断开了,在下一个请求发送时,服务器无法确定这次请求和上次的请求是否来自同一 ...
- iOS开发网络篇—XML数据的解析
iOS开发网络篇—XML数据的解析 iOS开发网络篇—XML介绍 一.XML简单介绍 XML:全称是Extensible Markup Language,译作“可扩展标记语言” 跟JSON一样,也是 ...
- Solr4.8.0源码分析(16)之SolrCloud索引深入(3)
Solr4.8.0源码分析(16)之SolrCloud索引深入(3) 前面两节学习了SolrCloud索引过程以及索引链的前两步,LogUpdateProcessorFactory和Distribut ...
- LVS+PIRANHA测试
有一个知识盲点,是这个VIP,在四个服务器上都要设置? 现在只测试了两个机器,REAL SERVER没有开动. 如果LVS和REALSERVER都可以停一个作互切的话,那KEEPALIVED要它他什么 ...
- Xamarin.Forms本地化多语言
Forms 右键新建文件夹 Localization 新建文件TranslateExtension.cs namespace Localization { /// <summary> // ...
- POJ1321 棋盘问题(dfs)
题目链接. 分析: 用 dfs 一行一行的搜索,col记录当前列是否已经放置. AC代码如下: #include <iostream> #include <cstdio> #i ...