二叉搜索树——算法导论(14)
1. 什么是二叉搜索树 顾名思义,二叉搜索树是以一棵二叉树来组织的。如下图,这样的一棵树可以使用一个链表数据结构来表示,其中的每一个节点是一个对象。除了key和卫星数据之外,每个节点还包含属性left(左孩子)、right(右孩子)、和p(双亲)(若不存在,则值为NIL)。 二叉搜索树中的关键字总是以满足 二叉搜索树性质 的方式存储: 设x是二叉搜索树的一个节点。如果y是x左子树中的一个节点,那么y.key≤x.key。如果y是x右子树中的一个节点,那么y.key≥x.key。 二叉搜索树性质允许我们使用一种简单的递归算法来按一定的顺序输出二叉搜索树中的所有关键字。我们常用的有 先序遍历 (输出的子树根的关键字位置位于左子树关键字和右子树关键字之间)、 中序遍历 、 后序遍历 。 下面给出先序遍历的递归算法: 我们可以证明:遍历一棵有n个节点的二叉搜索树需要花费θ(n)的时间(证明略)。 2. 查询二叉搜索树 (1) 这一小节,我们来讨论二叉搜索树的诸如:SEARCH,MINIMUM,MAXIMUN,SUCCESSOR,PERDECESSOR操作。 (2) search 我们使用如下一种算法去查询一棵二叉搜索树。该方法要求输入一个指向根节点的指针x和待查找的关键字k;输出为指向关键字为k的节点的指针(若存在。否则输出NIL)。 我们很容易知道,该查询算法的时间为O(h)