事叉搜索树-cis_orcad 本地数据库配置方法

时间:2024-06-28 07:12:09
【文件属性】:

文件名称:事叉搜索树-cis_orcad 本地数据库配置方法

文件大小:5.89MB

文件格式:PDF

更新时间:2024-06-28 07:12:09

数据结构 邓俊辉

第7章 搜索树 §7.2 事叉搜索树 220044 以图7.5中的二叉搜索树为例,查找关键码22的过程如下。首先,经与根节点16比较确 认目标关键码更大,于是深入以25为根的右子树递归查找;经比较发现目标关键码更小,故 继续深入以19为根的左子树递归查找;经再次比较确认目标关键码更大后,深入以22为根 的右子树递归查找;最终在节点22处发现匹配,查找成功。 当然,查找未必成功。比如针对关键码20的查找也会经过同一查找通路并抵达节点22, 但在因目标关键码更小而试图继续向左深入时发现左子树为空 ① ,至此即可确认查找失败。 图7.5 事叉搜索树癿查找过秳(查找所绊过通路以粗线条示惲) 纵观上述过程,在递归的每一层次,一旦发现当前节点为NULL,即说明查找范围已经 缩小至空,查找失败;否则,根据目标关键码与当前关键码的比较结果,继续向左(更小) 或向右(更大)深入查找,或者报告成功(相等)。由图7.5中该树的中序遍历序列可见, 上述查找过程与有序向量的二分查找过程完全等效,故可视作后者的一种推广。  search()接口的实现 一般地,在以v为根的(子)树中查找关键码e的过程,可表述为如下函数searchIn()。 1 template //在以v为根癿(AVL、SPLAY、rbTree等)BST子树中查找兰键码e 2 static BinNodePosi(T) & searchIn (BinNodePosi(T)& v, const T& e, BinNodePosi(T)& hot) { 3 if (!v || (e == v->data)) return v; //至此可确定成功戒失败,戒者 4 hot = v; //先记下弼前节点,然后再 5 return searchIn(((e < v->data) ? v->lChild : v->rChild), e, hot); //逑弻查找 6 } //迒回目标节点位置癿引用,以便后续揑入、初除操作;失败时,迒回NULL 代码7.3 事叉搜索树searchIn()算法 通常,节点的插入和删除操作都要首先调用查找算法,并根据查找结果确定后续的处理 方式。因此,这里以引用方式传递(子)树根节点,同时还针对BinTree对象的内部成员变 量_hot传递一个参数hot,这些都将为后续操作提供必要的信息。以下一节的插入操作为例, 在查找失败之后,hot所指示的最终节点位置也就是新节点可行的接入位置。 ① 此类空节点通常对应二空孩子指针戒引用,也可假惱地等效为“真实”节点,后一斱式丌仁可简化算法描述以及退化 情冴癿处理,也可直观地览释(B-树乀类)纵贯夗级存储局次癿搜索树。故在后一场合,空节点也称作外部节点 (external node),幵等效地弼作叶节点癿“孩子”。返里暂采用前一斱式,故空节点丌在揑图中出现


网友评论