1、定义及属性
二叉树搜索是以一棵二叉树组成的。如图1,一棵树可以用一个链表的数据结构来表示,链表中的每一个结点就是一个对象,每个结点包含如下属性:key、right、left和p,他们分别指向右孩子、左孩子和父结点。如果孩子结点和父结点不存在,他们相应的属性值为NIL。根节点是二叉树中唯一的父结点,它的指针值为NIL
(a)
(b)
图 1 二叉树
2、二叉搜索树的性质
在二叉树中,对于任意结点X,它的左子树中的关键字最大不大于X.key,右子树中的关键字不小于X.key;即 X.left.key<=X.key、X.right.key>=X.key。基于以上性质,所以同一组值的集合可以用不同的二叉搜索树表示。二叉搜索树的操作的最坏运行时间榆树的高度成正比。图(a)为包含6个结点、高度为2的二叉搜索树,图(b)与图(a)有相同关键字,但(b)的高度为4,即(a)相比(b)而言,(a)更高效。
3、历遍
二叉搜索树的性质使我们可以通过一个简单的递归算法来按序输出子树根结点的关键字,这种历遍称为中序历遍(inorder tree walk)。(类似地,先序历遍(preorder tree walk)中输出的根结点的关键字在其左右子树的关键字之前,而后序历遍(postorder tree walk)输出的根结点的关键字在其左右子树之后。)调用下面算法INORDER-TREE-WALK(T.root)就可以输出二叉搜索树T中所有元素。
INORDER-TREE-WALK(x)
if x != NIL
{
INORDER-TREE-WALK(x.left)
print x.left
INORDER-TREE-WALK(x.right)
}
二叉搜索树
最新推荐文章于 2024-06-25 18:35:32 发布