二叉排序树(java)

定义:二叉排序树是一棵特殊的二叉树,对于树中的所有节点,如果有左右孩子,那么,左孩子的值比该节点的值都小,右孩子的值比该节点的值都大。

代码实现如下:

package 二叉排序树;

import java.util.ArrayList;
import java.util.Scanner;

public class SortTree {
    
    //测试数据:13 1 6 4 8 7 10 3 14 -1
    
    private int key;    
    private SortTree l;
    private 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);
        }
        else if(key>this.key){
            if(this.r==null){
                this.r=new SortTree();
                this.r.key=key;
            }
            else
                //右子树递归建立二叉树
                this.r.bulitTree(key);
        }
    }
    
    /*
     * 递归寻找关键字,若存在关键字返回提示信息
     */
    public void seach(int key){
        //先与根节点进行比较,若不等于根节点,则根据该查找的值与根节点的大小,递归遍历左子树或者右子树
        if(key==this.key)
            System.out.println("找得到当前值:"+this.key);
        else if(key<this.key)
            this.l.seach(key);
        else
            this.r.seach(key);
    }
    
    public void inorder(){
        if(this.l!=null)
            l.inorder();
        System.out.print(this.key+",");
        if(this.r!=null)
            r.inorder();
    }
    
    public static void 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=new int[(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("输入有误");}
        }
    }
    
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 4,480评论 1 31
  • 四、树与二叉树 1. 二叉树的顺序存储结构 二叉树的顺序存储就是用数组存储二叉树。二叉树的每个结点在顺序存储中都有...
    MinoyJet阅读 1,576评论 0 7
  • 二叉树 在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”和“右子树”,左子树和右子...
    静默加载阅读 2,040评论 0 3
  • 一直以来,我都很少使用也避免使用到树和图,总觉得它们神秘而又复杂,但是树在一些运算和查找中也不可避免的要使用到,那...
    24K男阅读 6,780评论 5 14
  • #include C/C++里用来引入头文件,会造成重复引用(B和C都引用了A,D又同时引用了B和C)。可以用#i...
    乔夫打渔阅读 548评论 0 0