Map&Set

二分搜索树—(RBTree)—TreeMap / TreeSet
哈希表 —HashSet / HashMap

Map接口(映射关系)

存储键值对。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Map接口常见子类添加问题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Set

披着Set外衣的Map,也是collection接口的子接口。
collection接口: 线性表接口一次保存一个元素 ,其子类的都可以进行for-each循环
和List集合区别: Set 集合保存的元素不能重复
【使用Set集合去重处理】
在这里插入图片描述

搜索树

1、搜索树有哪些?–>RBTree、AVL(平衡BST)、2-3树、B树等等
2、概念:

BST:二分搜索树/二叉搜索树/二叉排序树
1、是二叉树
2、节点严格要求:每个树的左子树值<树根节点值<所有右子树值
JDK中BST不存在重复节点!!!
3、存储的节点必须具备可比较的能力(实现Compara接口或者传入比较器)

3、向BST添加一个节点:
【新添加的数一定是在叶子节点操作】
时间复杂度:平均logn
最坏 n–单支数

/**
     * 添加一个新节点
     *
     * @param val
     */
    public void add(int val) {
   
        root = add(root, val);
    }

    /**
     * 向当前以root为根的BST中插入一个新元素 ,返回插入后的根
     *
     * @param root
     * @param val
     * @return
     */
    private Node add(Node root, int val) {
   
        if (root == null) {
   
            Node node = new Node(val);
            size++;
            return node;
        }
        if (val < root.val) {
   
            root.left = add(root.left, val);
        }
        if (val > root.val) {
   
            root.rigth = add(root.rigth, val);
        }
        return root;
    }

4、判断value是否在BST中
平均:logn
最坏:n

 /**
     * 判断BST中是否存在值为value的节点
     *
     * @param val
     * @return
     */
    public boolean contains(int val) {
   
        return contains(root, val);
    }

    /**
     * 传入一个根节点和val判断该节点是否存在
     *
     * @param root
     * @param val
     * @return
     */
    private boolean contains(Node root, int val) {
   
        if (root == null) {
   
            return false;
        }
        if (root.val == val) {
   
            return true;
        } else if (val < root.val) {
   
            return contains(root.left, val);
        } else {
   
            return contains(root.rigth, val);
        }
    }

5、按照先序遍历打印BST

 @Override
    public String toString() {
   
        StringBuilder sb = new StringBuilder();
        generateBSTString(root, 0, sb);
        return sb.toString();
    }

    /**
     * 按照先序遍历,将BST节点值存于sb中
     *
     * @param root
     * @param height
     * @param sb
     */
    private void generateBSTString(Node root, int height, StringBuilder sb) {
   
        if (root == null) {
   
            sb.append(generateHeightStr(height)).append("Null\n");
            return;
        }
        sb.append(generateHeightStr(height)).append(root.val).append("\n");
        generateBSTString(root.left, height + 1, sb)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值