数据结构与算法之ACM Fellow-算法3.2 二叉查找树
数据结构与算法之ACM Fellow-算法3.2 二叉查找树
在本节中我们将学习一种能够将链表插入的灵活性和有序数组查找的高效性结合起来的符号表实现。具体来说,就是使用每个结点含有 两个 链接(链表中每个结点只含有一个链接)的二叉查找树来高效地实现符号表,这也是计算机科学中最重要的算法之一。
首先,我们需要定义一些术语。我们所使用的数据结构由 结点 组成,结点包含的 链接 可以为空( null)或者指向其他结点。在 二叉树 中,每个结点只能有一个父结点(只有一个例外,也就是 根结点,它没有父结点),而且每个结点都只有 左右 两个链接,分别指向自己的 左子结点 和 右子结点(如图 3.2.1 所示)。尽管链接指向的是结点,但我们可以将每个链接看做指向了另一棵二叉树,而这棵树的根结点就是被指向的结点。因此我们可以将二叉树定义为一个空链接,或者是一个有左右两个链接的结点,每个链接都指向一棵(独立的 )子二叉树。在 二叉查找树 中,每个结点还包含了一个键和一个值,键之间也有顺序之分以支持高效的查找。
定义。一棵 二叉查找树(BST)是一棵二叉树,其中每个结点都含有一个
Comparable的键(以及相关联的值)且每个结点的键都大于其左子树中的任意结点的键而小于右子树的任意结点的键。
我们在画出二叉查找树时会将键写在结点上。我们使用“A 是 E 的左子结点”的说法用键指代结点。我们用连接结点的线表示链接,并将键对应的值写在结点旁边(若值不确定则省略)。除了空结点只表示为向下的一条线段以外,每个结点的链接都指向它下方的结点。和以前一样,我们在例子中只会使用索引测试用例生成的单个字母作为键,如图 3.2.2 所示。

(约
)。
为由
)。我们有
,且对于
我们可以根据二叉查找树的递归结构直接得到一个归纳关系式:
这一项表示根结点使得树中的所有
。
不准确。
浙公网安备 33010602011771号