java递归方法建立搜索二叉树,具备查找关键字,插入新节点功能
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java递归方法建立搜索二叉树,具备查找关键字,插入新节点功能,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2689字,纯文字阅读大概需要4分钟。
内容图文
二叉排序树的定义:
二叉排序树满足以下三个性质(BST性质):
<1>若它的左子树非空,则左子树上所有节点的值均小于根节点的值
<2>若它的右子树非空,则右子树上所有节点的值均大于根节点的值
<3>左,右子树本身又各是一棵二叉排序树
根据二叉排序树的BST性质,可以说二叉排序树每个节点上的值(或称关键字)都是唯一的,并且二叉排序树以中序遍历输出的结果必然是一个有序的递增序列。
如下图所示:
用递归方法建立二叉排序树,减少了繁复的比较程序,效率较高。只需要知道每个节点的值,按照递归的方法,首先获取第一个节点的值,然后获取第二个节点的值,将第二个节点与第一个节点进行比较,若小于,则将第二个节点的值放在左子树,若大于,则将第二个节点的值放在右子树,循序渐进,递归每个节点的值,最终建立一棵完整的二叉排序树。
进行二叉排序树查找操作时,传递要查找的值,先与根节点进行比较,若不等于根节点,则根据该查找的值与根节点的大小,递归遍历左子树或者右子树。直到找到该查找值,输出结果。
进行二叉排序树插入操作时,直接将要插入的值用ArrayList链表存入数组,遍历数组,传入新的节点值,继续调用递归方法进行二叉排序树的建立。最终的结果以中序遍历二叉树输出。
代码如下:
package 二叉排序树; import java.util.ArrayList; import java.util.Scanner; public class SortTree { /** * @author 刘雁冰 * @date 2015-02-09 18:32 */ /* * 具备建立搜索二叉树,查找关键字,以及插入新节点功能 * * key:关键字,这里可以作为节点的值 * l:左子树 * r:右子树 */ public int key; public SortTree l; public SortTree r; /* * 递归方法建立一棵二叉排序树 */ public void bulitTree(int key){ //新加入来的节点先与根节点的值进行比较,小于根节点放入左子树,大于根节点放入右子树if(key<this.key){ if(this.l==null){ this.l=new SortTree(); this.l.key=key; } else//左子树递归建立二叉树this.l.bulitTree(key); } elseif(key>this.key){ if(this.r==null){ this.r=new SortTree(); this.r.key=key; } else//右子树递归建立二叉树this.r.bulitTree(key); } } /* * 递归寻找关键字,若存在关键字返回提示信息 */publicvoid seach(int key){ //先与根节点进行比较,若不等于根节点,则根据该查找的值与根节点的大小,递归遍历左子树或者右子树if(key==this.key) System.out.println("找得到当前值:"+this.key); elseif(key<this.key) this.l.seach(key); elsethis.r.seach(key); } publicvoid inorder(){ if(this.l!=null) l.inorder(); System.out.print(this.key+","); if(this.r!=null) r.inorder(); } publicstaticvoid main(String[] args) { // TODO Auto-generated method stub System.out.println("输入节点,第一个输入的作为二叉树的根节点(输入-1结束输入):"); Scanner sc=new Scanner(System.in); ArrayList<Integer>list=new ArrayList<Integer>(); int n=sc.nextInt(); while(n!=-1){ list.add(n); n=sc.nextInt(); } int []data=newint[(list.size())]; for(int i=0;i<list.size();i++){ data[i]=list.get(i); } SortTree st=new SortTree(); st.key=data[0]; for(int i=1;i<data.length;i++){ st.bulitTree(data[i]); } System.out.println("建立的搜索二叉树如下(以中序遍历输出):"); st.inorder(); System.out.println(); System.out.println("输入要进行的操作:"); System.out.println("1.查找当前值"); System.out.println("2.插入新的节点"); int choice=sc.nextInt(); switch(choice){ case 1:{ System.out.println("输入要查找的值:"); int k=sc.nextInt(); st.seach(k); break; } case 2:{ System.out.println("请输入新节点的值(输入-1结束输入):"); int m=sc.nextInt(); while(m!=-1){ list.add(m); m=sc.nextInt(); } for(int i=data.length-1;i<list.size();i++){ st.bulitTree(list.get(i)); } System.out.println("插入新的节点后,二叉搜索树的结果如下(以中序遍历输出):"); st.inorder(); break; } default:{System.out.println("输入有误");} } } }
调试结果如下:
原文:http://www.cnblogs.com/luckid/p/4282449.html
内容总结
以上是互联网集市为您收集整理的java递归方法建立搜索二叉树,具备查找关键字,插入新节点功能全部内容,希望文章能够帮你解决java递归方法建立搜索二叉树,具备查找关键字,插入新节点功能所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。