二叉树的定义
我们可以将二叉树定义为一个空链接,或者是一个有左右两个链接的节点,每个链接都指向一棵(独立的)子二叉树。
定义:
一棵二叉查找树(BST)是一棵二叉树,其中的每一个节点都含有一个 Comparable 的键(以及相关联的值)且每个节点的键都大于其左子树中的任意节点的键而小于右子树的任意节点的键。
基本实现
树节点的实现
树由 Node 对象组成,每个对象都含有:
- 一对键值
- 两条链接
- 一个节点计数器N
1 | private class Node |
BST implementation (skeleton)
1 | public class BST<Key extends Comparable<Key>, Value> |
查找和排序方法的实现
有序性相关的方法与删除操作
最大键和最小键
如果根结点的左链接为空,那么一棵二叉查找树中最小的键就是根节点;如果左链接为非空,那么树中的最小键就是左子树中的最小键。
找出最大键的方法也是类似的,只是变为查找右子树而已。
向上取整和向下取整
如果给定的键 key 小于二叉查找树的根结点的键,那么小于等于 key 的最大键 floor(key)
一定在根结点的左子树中;如果给定的键 key 大于二叉查找树的根结点,那么只有当根结点右子树中存在小于等于 key 的节点时,小于等于 key 的最大键才会出现在右子树中,否则根结点就是小于等于 key 的最大键。
选择操作
排名
删除最大键和删除最小键
删除操作
范围查找
完整实现
1 | import edu.princeton.cs.algs4.Queue; |