1. publicclassTest{
  2.     publicstaticvoid main(String[] args){
  3.         int[] r =newint[]{5,1,3,4,6,7,2,8,9,0};
  4.         BST binarySearchTree =new BST(r);
  5.         binarySearchTree.inOrder();
  6.         System.out.println();
  7.         binarySearchTree.searchBST(6);//查找成功
  8.         System.out.println();
  9.         binarySearchTree.searchBST(10);//查找失败->插入
  10.         System.out.println();
  11.     }
  12.  
  13. }
 
 
  1. publicclass BST {
  2.  
  3.     //二叉树结点
  4.     publicclassBiNode{
  5.         int data;
  6.         BiNode left;
  7.         BiNode right;
  8.  
  9.         BiNode(int data,BiNode left,BiNode right){
  10.             this.data = data;
  11.             this.left = left;
  12.             this.right = right;
  13.         }
  14.     }
  15.  
  16.     privateBiNode root = null;
  17.  
  18.     BST(int[] r)
  19.     {
  20.         for(int i =0; i < r.length; i++)
  21.         {
  22.             BiNode s =newBiNode(r[i],null,null);
  23.             root = insertBST(root, s);
  24. //            insertBST1(s);
  25.         }
  26.     }
  27.  
  28.     //插入(递归)
  29.     publicBiNode insertBST(BiNode head,BiNode s)
  30.     {
  31.         if(head == null){
  32.             head = s;
  33.             return head;
  34.         }
  35.  
  36.         if(s.data < head.data)
  37.             head.left = insertBST(head.left, s);
  38.         else
  39.            head.right = insertBST(head.right,s);
  40.  
  41.         return  head;
  42.     }
  43.  
  44.     //插入(非递归:循环、用临时变量保存过程)
  45.     publicvoid insertBST1(BiNode s)
  46.     {
  47.         if(root == null){
  48.             root = s;
  49.             return;
  50.         }
  51.  
  52.         BiNode temp = root;//需要临时结点记录
  53.  
  54.         while(true)
  55.         {
  56.             if(s.data < temp.data)
  57.             {
  58.                 if(temp.left == null)
  59.                 {
  60.                     temp.left = s;
  61.                     return;
  62.                 }
  63.                 temp = temp.left;
  64.             }
  65.             else
  66.             {
  67.                 if(temp.right == null)
  68.                 {
  69.                     temp.right = s;
  70.                     return;
  71.                 }
  72.                 temp = temp.right;
  73.             }
  74.         }
  75.     }
  76.  
  77.  
  78.     //查找:成功->返回;失败:插入
  79.     publicBiNode searchBST(int a)
  80.     {
  81.         BiNode s1 = searchBST(root,a);
  82.         if(s1 == null){
  83.             BiNode s2 =newBiNode(a,null,null);
  84.             insertBST1(s2);
  85.             System.out.println("search fail ; insert success: "+ s2.data);
  86.             inOrder();
  87.             return s2;
  88.         }else{
  89.             System.out.println("search success: "+ s1.data);
  90.             return s1;
  91.         }
  92.     }
  93.     //查找
  94.     privateBiNode searchBST(BiNode head,int a)
  95.     {
  96.         if(head == null)
  97.             return null;
  98.  
  99.         if(a < head.data)
  100.             return searchBST(head.left, a);
  101.         elseif(a > head.data)
  102.             return searchBST(head.right, a);
  103.         else
  104.             return head;
  105.     }
  106.  
  107. //    删除
  108. //    删除f的孩子p
  109.     publicvoid deleteLeftBST(BiNode f,BiNode p)
  110.     {
  111.         if(p.left == null && p.right == null)    //p为叶子
  112.         {
  113.             f.left = null;
  114.             p = null;
  115.         }
  116.         elseif(p.right == null)                  //p只有左子树
  117.         {
  118.             f.left = p.left;
  119.             p = null;
  120.         }
  121.         elseif(p.left == null)                  //p只有右子树
  122.         {
  123.             f.left = p.right;
  124.             p = null;
  125.         }
  126.         else                                       //p的左右子树均不空
  127.         {
  128.             BiNode par = p, s = par.right;          //用par s 去查找p的右子树的最左下结点
  129.             while(s.left != null)
  130.             {
  131.                 par = s;
  132.                 s = par.left;
  133.             }
  134.             p.data = s.data;                       //交换最左下结点s与p结点数据
  135.  
  136.                                                     //剪枝(删除s结点)
  137.             if(par == p)                          //处理特殊情况
  138.             {
  139.                 par.right = s.right;
  140.                 s = null;
  141.             }
  142.             else                                   //处理一般情况
  143.             {
  144.                 par.left = s.right;
  145.                 s = null;
  146.             }
  147.  
  148.         }
  149.     }
  150.  
  151.     //先序遍历
  152.     publicvoid preOrder(){
  153.         System.out.print("preOrder traversal with recursion:");
  154.         preOrder(root);
  155.         System.out.println();
  156.     }
  157.     //递归
  158.     privatevoid preOrder(BiNode root){
  159.         if(root == null)return;
  160.  
  161.         System.out.print(root.data);       //访问结点
  162.         preOrder(root.left);
  163.         preOrder(root.right);
  164.     }
  165.  
  166.     //中序遍历
  167.     publicvoid inOrder(){
  168.         System.out.print("inOrder traversal with recursion:");
  169.         inOrder(root);
  170.         System.out.println();
  171.     }
  172.     //递归
  173.     privatevoid inOrder(BiNode root){
  174.         if(root == null)//访问结点
  175.             return;
  176.  
  177.         inOrder(root.left);
  178.         System.out.print(root.data);      //访问结点
  179.         inOrder(root.right);
  180.     }
  181.  
  182.     //后序遍历
  183.     publicvoid postOrder(){
  184.         System.out.print("postOrder traversal with recursion:");
  185.         postOrder(root);
  186.         System.out.println();
  187.     }
  188.     //递归
  189.     privatevoid postOrder(BiNode root){
  190.         if(root == null)return;
  191.  
  192.         postOrder(root.left);
  193.         postOrder(root.right);
  194.         System.out.print(root.data);     //访问结点
  195.     }
  196. }
 
输出:
  1. inOrder traversal with recursion:0123456789
  2.  
  3. search success:6
  4.  
  5. search fail ; insert success:10
  6. inOrder traversal with recursion:012345678910
 
 
 

二叉排序树BST代码(JAVA)的更多相关文章

  1. 二叉排序树(BST)创建,删除,查找操作

    binary search tree,中文翻译为二叉搜索树.二叉查找树或者二叉排序树.简称为BST 一:二叉搜索树的定义 他的定义与树的定义是类似的,也是一个递归的定义: 1.要么是一棵空树 2.如果 ...

  2. Atitit.http代理的实现 代码java php c# python

    Atitit.http代理的实现 代码java php c# python 1. 代理服务器用途 代理服务器看成是一种扩展浏览器功能的途径.例如,在把数据发送给浏览器之前,可以用代理服务器压缩数据 调 ...

  3. 二叉排序树(BST)构造与应用

             二叉排序树(BST)构造与应用       本文取自<数据结构与算法>(C语言版)(第三版).出版社是清华大学出版社.       本博文作为学习资料整理. 源码是VC+ ...

  4. 分页 工具类 前后台代码 Java JavaScript (ajax) 实现 讲解

    [博客园cnblogs笔者m-yb原创, 转载请加本文博客链接,笔者github: https://github.com/mayangbo666,公众号aandb7,QQ群927113708]http ...

  5. Java数据结构和算法(五)二叉排序树(BST)

    Java数据结构和算法(五)二叉排序树(BST) 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 二叉排序树(Binary S ...

  6. stl文件格式解析代码--java版

    代码是参考three.js中的stlLoader.js写的. 需要注意的地方,java中byte取值-128~127 package test_stl.test_entry; import java. ...

  7. n皇后2种解题思路与代码-Java与C++实现

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要讲了n皇后问题的解题思路,并分别用java和c++实现了过程,最后,对于算法改进 ...

  8. 如何写出无法维护的代码(JAVA版)

    程序命名(针对那些不能混淆的代码) 容易输入的名字.比如:Fred,asdf 单字母的变量名.比如:a,b,c, x,y,z,或者干脆上中文比如(阿隆索肯德基) 有创意地拼写错误.比如:SetPint ...

  9. [改善Java代码]Java的泛型是类型擦除的

    泛型可以减少强制类型的转换,可规范集合的元素类型,还可以提高代码的安全性和可读性,正是因为有了这些优点,自从Java引入泛型之后,项目的编码规则上便多了一条,优先使用泛型. Java泛型(Generi ...

随机推荐

  1. WBS说明

    work breakdown structure(WBS) 工作分解结构 (英语:Work Breakdown Structure, WBS)是一个详尽的,层次的(从全面到细节)的树形结构,由可交付成 ...

  2. 【USACO 2.1.3】三值的排序

    [题目描述] 排序是一种很频繁的计算任务.现在考虑最多只有三值的排序问题.一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌排序的时候.在这个任务中可能的值只有三种1,2和3.我们用交换的方法把他排 ...

  3. 【USACO 1.3.3】回文串

    [題目描述] 据说如果你给无限只母牛和无限台巨型便携式电脑(有非常大的键盘),那么母牛们会制造出世上最棒的回文.你的工作就是去寻找这些牛制造的奇观(最棒的回文). 在寻找回文时不用理睬那些标点符号.空 ...

  4. wamp环境网站根目录更改

    1.修改wampserver的默认目录 安装好wampserver后,网站根目录默认为:安装目录\wamp\www,也就是wampserver安装目录下的www文件夹. 我们以更改为:D\www为例. ...

  5. Spring ApplicationContext的国际化支持

    ApplicationContext接口继承MessageSource接口,因此具备国际化功能.下面是MessageSource接口定义的三个国际化方法. >String getMessage( ...

  6. 调试器带参数调试(OD,EDB)

    小东西,不要在意这些细节-- OD带参数比较简单: 文件-- 打开 --  在最下面有一个参数 KALI LINUX下的EDB 命令格式为  edb –run  "对应程序路径"  ...

  7. 遇到个鬼,在WIN08的DELL R710上安装CENTOS 63,无法格式化以前的硬盘分区,安装无法进行下去。

    遇到个鬼,在WIN08的DELL R710上安装CENTOS 63,无法格式化以前的硬盘分区,安装无法进行下去. 我下面类似的办法来解决,就是---进行在安装过程中,用快捷键:Ctrl+Alt+F2到 ...

  8. Android 4.4 上实现透明导航栏和状态栏 Translucent system bar

    Translucent system UI styling To get the most impact out of your content, you can now use new window ...

  9. org/springframework/core/MethodClassKey

    解决下面报错的办法: 把pom.xml中下面两个dependency的version去掉. <dependency> <groupId>org.springframework& ...

  10. 【HDOJ】3500 Fling

    题意巨难懂.简言之,就是球互相碰撞时,主动碰撞的球将会停止,另一个球将沿着碰撞方向继续移动,不断碰撞.但是无法弹射紧挨着的球,但是若a弹射b,bc相邻,这种情况b可以弹射c. #include < ...