第9章-查找第3讲-动态查找表(二叉排序树)

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

88
中序序列: 20,30,32,35,40,50,80,85,88,90
二叉排序树的中序序列是一个递增有序序列 根结点的最左下结点是关键字最小的结点 根结点的最右下结点是关键字最大的结点
16/27
3、 二叉排序树的结点删除
(1)被删除的结点是叶子结点:直接删去该结点。
例如:
被删关键字 = 8280
18/27
(3)被删除的结点既有左子树,也有右子树
例如:
被删关键字 = 50 540
30
80
20
40
90
35
85
32
88
以其中序前驱值替换之(值替换) ,然后再删除该前驱 结点。前驱是左子树中最大的结点。
也可以用其后继替换之,然后再删除该后继结点。后继是右
子树中最小的结点。
19/27
━━本讲完━━
8/27
二叉排序树具有类似折 半查找的性质,
又采用了链表结构,是 一种动态查找表
查找过程
50
30
20
40
80 90
查找8539305
有n个结点的二叉排序树 10 25 35
的平均检索长度
ASL为O(log2n),
23
和二叉树的形态有关
85 88
若二叉排序树为空,则查找不成功 否则,
1)若给定值等于根结点的关键字,则查找成功; 2)若给定值小于根结点的关键字,则继续在左子树上进行查找 3)若给定值大于根结点的关键字,则继续在右子树上进行查找
9/27
2、二叉排序树的插入和生成
根据动态查找表的定义,“插入”操作在查找不成功时才进行
插入原则:若二叉排序树为空,则插入结点应为新的根结点; 否则,继续在其左、右子树上查找,直至某个叶子结点的左子 树或右子树为空为止,则插入结点应为该叶子结点的左孩子或 右孩子
10
插入15
3
18
2
8 12
7
15
10/27
20/27
以二叉树或树作为表的组织形式,称为树表,它是一类动 态查找表,不仅适合于数据查找,也适合于表插入和删除操作。
常见的树表:
二叉排序树
1/27
9.3.1 二叉排序树
二叉排序树(简称BST)又称二叉查找(搜索)树,其定义为: 二叉排序树或者是空树,或者是满足如下性质(BST性质)的二叉树:
若它的左子树非空,则左子树上所有结点值(指关键字值)均小于 根结点值;
50
30
80
20
40
90
35
85
32
88
其双亲结点中相应指针域的值改为“空”
17/27
(2) 被删除的结点只有左子树或者只有右子树,用其左子树或者
右子树替换它(结点替换)。
例如:
被删关键字 = 8400
50
30
80
20
40
90
35
85
32
88
其双亲结点的相应指针域的值改为 “指向被删除结点的左子树 或右子树”。
二叉排序树生成:从空树出发,经过一系列的查找、插入操作 之后,可生成一棵二叉排序树
例 { 10, 18, 3, 8, 12, 2, 7, 3 }
10
3
18
2
8 12
中序研遍究历二二叉叉排排序序树树的, 得出意其义特?点
7
3
插入的新结点是二叉排序树的新叶子结点
一个无序序中相列序当可遍于以历在通二有过叉序构排序造序列一树上棵可插二得入叉到记排一录序个而树关不变键需成字要一的移个有动有序序序序列列
bt
N
k < bt->key
k > bt->key
每一层只和一个结点进行关键字比较!
7/27
查找失败的情况
p 查找到p所指结点


若k<p->data,并且p->lchild=NULL,查找失败。 若k>p->data,并且p->rchild=NULL,查找失败。
加上外部结点
一个外部结点对应某内部 结点的一个NULL指针
12/27
序列: 25 18 46 2 53 39 32 4 74 67 60 11
25
18
46
2 4
39 32
53 74
11
67
60
二叉排序树创建完毕
13/27
18 2
4
25 46
39 32
53 74
ASL成功=
11
67
60
1×1+2 ×2+3 ×3+3 × 4+2 ×5+1 ×6 12
=3.5
14/27
加上13个外部结点:
18 2
4 11
25 46
39 32
53 74
67 60
ASL不成功=
1×2+3 ×3+4 ×4+3 × 5+2 ×6 13
=4.15
15/27
二叉排序树的特点
3300
20
5500 4400
最左下结点, 即为关键字
3355
最小的结点
源自文库
32
bt
8800 9900
85
最右下结点, 即为关键字 最大的结点
构造树的过程即是对无序序列进行排序的过程
11/27
【例9-3:p329】已知一组关键字为: {25,18,46,2,53,39,32,4,74,67,60,11}
按表中的元素顺序依次插入到一棵初始为空的二叉排序树中, 画出该二叉排序树。
求在等概率的情况下查找成功的平均查找长度和查找不成功的 平均查找长度。
若它的右子树非空,则右子树上所有结点值均大于根结点值; 左、右子树本身又各是一棵二叉排序树。
注意:二叉排序树中没有相同关键字的结点。
2/27
二叉树结构
满足BST性质:结点值约束
二叉排序树
3/27
例如:
50
30
20
40
80 90
10
25
35
66
23
不 是二叉排序树。
85 88
4/27
试一试
二叉排序树的中序遍历序列有什么特点?
5/27
二叉排序树的结点类型如下:
typedef struct node { KeyType key;
InfoType data; struct node *lchild,*rchild; } BSTNode;
//关键字项 //其他数据域 //左右孩子指针
6/27
1、二叉排序树上的查找
二叉排序树可看做是一个有序表,所以在二叉排序树上进行查 找,和二分查找类似,也是一个逐步缩小查找范围的过程。
相关文档
最新文档