简易搜索二叉树的实现

首先我们需要知道的是二叉搜索树的特点:子节点比根节点小的都在根结点的左边,比根节点大的都在根节点的右边
需要定义一个节点类(内部静态类)用来记录左右节点以及节点上的数据

class BinarySortTree {
	 //二叉树的根节点
    private Node root;
    //元素个数
    private int size;
    //添加元素
    public void add(int v) {
        if (root == null) {
            root = new Node(v);
            size++;
            System.out.println("添加了根元素:"+root.item);
        }else {//不为空
            //根添加子节点
            if (root.addChild(v)) {
                size++;
            }
        }
    }
    //中序遍历
    public void middleList() {
        root.printNode();
    }
	/**
     * 节点类型
     */
    static class Node {
        //元素数据
        private int item;
        //左节点
        private Node left;
        //右节点
        private Node right;
        //构造方法
        public Node(int item) {
            this.item = item;
        }

        //添加孩子节点方法
        public boolean addChild(int v) {
            if (this.item > v){//v放在左边
                if (this.left == null) {
                    //左边没有节点,创建新节点
                    this.left = new Node(v);
                    System.out.println(v+"放在"+this.item+"的左边");
                }else {
                    //如果左边节点不为空,则递归循环判断
                    return this.left.addChild(v);
                }
            }else if (this.item < v) {//v放在右边
                if (this.right == null) {
                    //右边没有节点,创建新节点
                    this.right = new Node(v);
                    System.out.println(v+"放在"+this.item+"的右边");
                }else {
                    //如果右节点不为空,则递归循环判断
                    return this.right.addChild(v);
                }
            }else {
                System.out.println(v+"重复元素");
                return false;
            }
            return true;
        }

        //打印元素
        public void printNode() {
            //判断左边有没有元素 有则打印
            if (this.left != null) {
                this.left.printNode();
            }
            //打印元素
            System.out.println(this.item);
            //判断右边,如果有元素 打印
            if (this.right != null) {
                this.right.printNode();
            }

        }
    }
}

主方法测试:

	    BinarySortTree bs = new BinarySortTree();
        bs.add(15);
        bs.add(2);
        bs.add(56);
        bs.add(20);
        bs.add(45);
        bs.add(45);
        bs.add(8);
        bs.add(12);
        bs.middleList();
        System.out.println();
        System.out.println("元素个数:"+bs.getSize());

运行结果:

添加了根元素:15
2放在15的左边
56放在15的右边
20放在56的左边
45放在20的右边
45重复元素
8放在2的右边
12放在8的右边
2 8 12 15 20 45 56 
元素个数:7
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值