二分搜索树的简单原理

首先了解二叉树

在这里插入图片描述

  • 和链表一样,是动态数据结构(在创建这种数据结构时不需要考虑容基)
  • 每一个元素存在节点中,除了元素之外,还有两个指向其他节点的引用,分别叫做left和right,通常叫做左孩子和右孩子。
  • 对于上图15节点来说,左边指向6节点,右边指向23节点。同理6节点,左边有4节点,右边有7节点。
  • 对于每一个节点最多只能分成两个叉,二叉树每个节点最多有两个孩子
    -二叉树具有唯一的根节点,15节点就是根节点
  • 一个孩子都没有的节点被称为叶子节点,即左右孩子都为空。
  • 每个节点最多只能有一个父亲节点
  • 二叉树具有天然的递归结构
  • 每一个节点的左子树,右子树也是二叉树(15的左孩子是6,6节点可以看作是4,7,5的根节点;23可以看作71,50的根节点)。每一颗二叉树,它的左侧和右侧又分别连接了节点个数更小的两颗二叉树。
  • 二叉树不一定是“满的”。一个节点也可以看作是二叉树,甚至NULL也可以看作是二叉树。

二分搜索树

  • 是一颗二叉树
  • 具有自己独特的性质:
    每一个节点的值都要大于其左子树所有节点的值小于右子树所有节点的值
  • 每一颗子树也是二分搜索树
  • 存储的元素必须有可比较性(比如存储学生信息,使用学号进行查找等,数据与数据直接存在比较关系)

二分搜索树的简单结构

BST.java

// 支持泛型,这个类型必须拥有可比较性
public class BST<E extends Comparable<E>> {
    // 对应的节点类
    private class Node {
        public E e;
        public Node left;
        public Node right;

        public Node(E e) {
            this.e = e;
            left = null;
            right = null;
        }
    }

    // 需要一个根节点
    private Node root;
    // 记录二分搜索树存储多少个元素
    private int size;

    public BST() {
        root = null;
        size = 0;
    }

    // 当前存储了多少个元素
    public int getSize() {
        return size;
    }

    // 查看当前二分搜索树是否为空
    public boolean isEmpty() {
        return size == 0;
    }
}

写在最后

如果代码有还没有看懂的或者我写错的地方,欢迎评论,我们一起学习讨论,共同进步。
推荐学习地址:
liuyubobobo老师的《玩转数据结构》:https://coding.imooc.com/class/207.html
最后,祝自己早日咸鱼翻身,拿到心仪的Offer,冲呀!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章