Java实现二叉排序树

二叉排序树

二叉排序树(Binary Sort Tree), 又称二叉查找树(Binary Search Tree),亦称二叉搜索树。是数据结构中的一类。在一般情况下,查询效率比链表结构要高。

特点:
  1. 若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  2. 若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  3. 左、右子树也分别为二叉排序树;
  4. 没有键值相等的结点。

代码实现

    /**
     * 二叉树的根节点
     */
    private Node root;
    /**
     * 添加元素
     */
    public void add(int v){
    
    	// 如果此时树中无数据,则第一个添加到树中的元素为根节点 
        if (root == null){
            root = new Node(v);
            System.out.println("根节点:" + v);
        } else {
        
            // 如果已有元素,则进行加子节点的方法
            root.addChild(v);
        }
    }

   /**
   * 进行中序遍历,使树内元素顺序输出
   * /
    public void middleList(){
    	// 调用静态类中的打印方法
        root.print();
    }
    
    static class Node{
        // 数据元素
        private int item;
        // 左节点
        private Node left;
        //右节点
        private Node right;
	// 为结点赋予值
        public Node(int item){
            this.item = item;
        }

        /**
         * 添加孩子方法
         * @param v
         */
        public void addChild(int v) {
            // 如果根元素的值大于输入元素的值,则将其放入左子树
            if (this.item > v){
                // 如果左子树不为空,则使用递归继续进行判断。
                if (this.left != null){
                    this.left.addChild(v);
                } else {
                    // 左子树为空,放入该元素。 
                    this.left = new Node(v);
                    System.out.println(v + "放在" + this.item + "的左边");
                }
            } else if (this.item < v){  // 判定同左子树的判定
                if (this.right != null){
                    this.right.addChild(v);
                } else {
                    this.right = new Node(v);
                    System.out.println(v + "放在" + this.item + "的右边");
                }
            } else {
            	// 不允许有重复的元素
                System.out.println("重复元素!");
            }
        }
	/**
	* 打印方法,中序遍历出树内元素
	* /
        public void print() {
            // 如果当前根节点的左子树不为空,递归,继续调用打印方法。
            if (this.left != null){
                this.left.print();
            }
	    // 打印元素
            System.out.print(this.item + "\t");
           // 同左子树方法
            if (this.right != null){
                this.right.print();
            }
        }
    }

// 进行测试
// 实例化类对象
BinarySortTree binarySortTree = new BinarySortTree();

// 添加元素
binarySortTree.add(10);
binarySortTree.add(40);
binarySortTree.add(20);
binarySortTree.add(10);
binarySortTree.add(90);
// 进行中序遍历,调用方法
binarySortTree.middleList();

结果

在这里插入图片描述

总结:

写代码时不要想着一次就能完成,要善于写方法。当发现程序中无这种方法是,自己构造一个。还有,一定要记住树的特性,通过特性来完善功能。

©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页