首先了解二叉树
和链表一样,是动态数据结构
(在创建这种数据结构时不需要考虑容基)- 每一个元素存在节点中,除了元素之外,还有两个指向其他节点的引用,分别叫做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,冲呀!