#笔记整理
查找
动态查找表——基于树表的查找法
动态查找表的特点:
表结构本身在查找过程中动态生成,即对于给定值 key,若表中存在关键字等于 key 的记录,则查找成功,否则插入关键字等于 key 的记录。
动态查找表的主要运算
- 创建、销毁
- 查找、插入和删除
- 遍历
二叉排序树(二叉搜素树、二叉查找树)BST (Binary Sort Tree)/(Binary Search Tree)
定义:
二叉排序树或者是一棵空树, 或者是具有如下性质的二叉树:
1. 若它的左子树不空, 则左子树上所有结点的值均小于根结点的值;
2. 若它的右子树不空, 则右子树上所有结点的值均大于根结点的值;
3. 它的左右子树也分别为二叉排序树。
二叉排序树的查找操作
二叉排序树可看做是一个有序表,在二叉排序树上进行查找,和折半查找类似,也是一个逐步缩小查找范围的过程。
// 二叉树结点结构的定义
typedef struct BiTNode{
int data;
BiTNode *lchild, *rchild;
BiTNode(int n = 0) : data(n), lchild(nullptr), rchild(nullptr){
}
}BiTNode, *BiTree;
// 二叉排序树的查找操作,递归查找二叉排序树 T 中是否存在 key
// parent 指向 T 的双亲
// p 指向查找成功的结点或指向查找路径上访问的最后一个结点。
bool searchBST(BiTree T, int key, BiTNode *parent, BiTNode **p){
if(!T){
// 树遍历结束都没有找到 key, 查找失败。
*p = parent;
return false;
}else if(key == T->data){
// 查找成功
*p = T;
return true;
}else if(key < T->data){
return searchBST(T