数据结构二叉排序树.ppt

合集下载

数据结构2二叉树.ppt

数据结构2二叉树.ppt

13 14 15
特点:每一层上都含有最大结点数。
(4)完全二叉树
1
2
4
5
3
6
7
8 9 10 11 12
1
2
4
5
3
6
7
8 9 10 11
12
完全二叉树
非完全二叉树
特点:除最后一层外,每一层都取最大结点数,
最后一层结点都集中在该层最左边的若干位置。
2、二叉树的存储结构 (1) 顺序存储结构
2B
4c
5D
二因为叉树的一每种个特结殊点的的树度型不结同构,,存特储点困是难树,中使每对个树结的点处只理有算两法棵 子很树复杂,且。子所树以有引左出右二之叉分树的,讨次论序不。能颠倒。
空二叉树
仅有 根结点
右子树 为空
左子树 为空
二叉树的五种基本形态
左右子树 均非空
二叉数是n(n0)个结点的有限集合。它或为空 数(n=0),或由一个根结点和两棵分别称为根的左子 树和右子树的互不相交的二叉数组成。
计算机科学与工程系
办公室
教研室
实验室
研究室
行总 政支 办办 公公 室室
计 算 机 教 研 室
软 件 教 研 室
软 件 实
综 合 实
数 字 逻 辑
组 成 原 理
验验实 试
室室验 验
室室
管 理 信 息
知 识 工
微 机 应
系 统 研 究
程 研 究
用 研 究
室 室室
树中的基本术语:
1.结点、结点的度、树的度 2.叶子结点、分支结点 3.孩子、双亲、兄弟、 E
要比较 log2n次。
查找23和79的过程如下图: mid=(low+high)/2不进位取整

二叉排序树-PPT

二叉排序树-PPT


Switch(1)

中序遍历

Switch(2)
计算平均查找长度


Switch(3)

删除结点

default

提示出错

生成二叉排序树
以“回车”作为输入结束标志,输入 数列L,生成一棵二叉排序树。 建立二叉排序树,首先用一个一维数 组记录下读入的数据,然后再用边查 找边插入的方式将数据一一对应放在 完全二叉树相应的位置,为空的树结 点用“0” 补齐。
二叉排序树
——顺序表结构存储
成员:孙杨 任务:
二叉排序树的创建、二叉排序树关键字的查找和 中序遍历。二叉排序树指定关键字的删除和平均 查找长度的计算
设计目录
顺序表存储结构 生成二叉排序树 中序遍历 计算平均查找长度 查找并删除结点 主程序创Βιβλιοθήκη 二叉排序树流程图是
Exit(0)退出
Switch(0)
查找并删除结点
输入元素x,查找二叉排序树T,若存在含 x的结点,则删除该结点,并作中序遍历, 否则输出信息“无x”。
删除二叉排序树中某个结点,采用边查找 边插入的方式,类似重新建立一个一维数 组作为存储新树的空间。将原数组中的数 据一个一个的插入树中,若遇到需要删除 的结点则不执行插入操作。
在一棵二叉排序树上,查找与x有相同关键字值的 元素的递归算法可描述为: 若二叉树为空,则搜索失败;否则,将x与根结 点比较,若x小于该结点的值,则以同样的方法搜 索左子树,而不必搜索右子树;若x大于该结点的 值,则以同样的方法搜索右子树,而不必搜索左子 树;若x等于该结点的值,则搜索成功终止。这里 元素间的比较是指它们的关键字值间的比较。 只有搜索到达空子树时,搜索算法才算失败终 止。

DS06数据结构树-二叉排序树.ppt

DS06数据结构树-二叉排序树.ppt

Aug July
Sept
Oct Dec
Nov
第4章 树
§4.4二叉搜索树
• 对于一个无序序列可以通过构造一棵BST树而变成一个有 序序列。
• 由算法知,每次插入的新结点都是BST树的叶子结点,即 在插入时不必移动其它结点,仅需修改某个结点的指针。
• 利用BST树的插入操作,可以从空树开始逐个插入每个结 点,从而建立一棵BST树.
Tmp = FindMin( BST->Right ); //在右子树中找最小的元素填充删除结点
BST->Data = Tmp->Data;
BST->Right = Delete( BST->Data, BST->Right); //在删除结点的右子树中删除最小元素
} else { //被删除结点有一个或无子结点
return BST; }
代码4.17 查找最大元素的迭代函数
第4章 树
§4.4二叉搜索树
❖ 二叉搜索树的插入
〖分析〗将元素X插入二叉搜索树BST中关键是要找到元素应该插 入的位置。位置的确定可以利用与查找函数Find类似的方法,如果 在树BST中找到X,说明要插入的元素已存在,可放弃插入操作。 如果没找到X,查找终止的位置就是X应插入的位置。
➢ 最大元素一定是在树的最右分枝的端结点上 ➢ 最小元素一定是在树的最左分枝的端结点上
18
最左端点
10
20
7
15
22
9
§4.4二叉搜索树 最右端点
第4章 树
§4.4二叉搜索树
Position FindMin( BinTree BST ) {
if( !BST ) return NULL; //空的二叉搜索树,返回NULL else if( !BST->Left )

数据结构 二叉排序树[高级课件]

数据结构 二叉排序树[高级课件]

8
(2) 生成二叉排序树的算法:
BiTree crt_bstree(BiTree &root){
//输入一个关键字序列,生成一棵二叉排序树的二叉链表结构
root=NULL; read(x);
while (x≠ 结束标志){
s=(BiTree)malloc(sizeof(BiTNode))
s→key=x ; …… ; //生成新结点 s→lchild =NULL ; s→rchild =NULL; ins_ bstree(root, s); read(x);}
12
(3) 被删除的结点既有左子树,也有右子树
被删关键字 = 50 540
30
80
20
40 某结点的前驱一
定在它的左子树
90
的最右下方
35
85
32
前驱结点
88
被删结点
以其前驱替代之,然后 严选内容再删除该前驱结点 13
5. 二叉排序树的查找分析
比较次数 = 被查结点所在的层次数。 二叉排序树的性能取决于树的形态,而二叉树的 形态取决于插入结点的顺序。
9.4 二叉排序树
1.定义:
二叉排序树(二叉搜索树或二叉查找树) 或者是一棵空树;或者是具有如下特性的二叉树
(1) 若它的左子树不空,则左子树上所有结点的 值均小于根结点的值;
(2) 若它的右子树不空,则右子树上所有结点 的值均大于等于根结点的值;
(3) 它的左、右子树也都严分选内容别是二叉排序树。 1
struct BiTNode *lchild;
struct BiTNode *rchild;
} BiTNode,*BiTree;
严选内容
5

二叉树 排序PPT课件

二叉树 排序PPT课件
常用算法执行中的数据比较次数和数据移动次数来衡量。
01.12.2020
6
为简单起见,数据的存储结构采用记录数组形式, 同时假定关键字是整数。记录数组的类型说明如下:
Typedef int KeyType typedef struct { KeyType key;
int other; } DataType; DataType R[n];
如:2, 2*,1,排序后若为1, 2*, 2 则该排序方法是不稳 定的。在应用排序的某些场合,如选举和比赛等,对排序 的稳定性是有特殊要求的。
▪内排序与外排序 :排序过程是否全部在内存进行。
(区分标准)
01.12.2020
5
▪ 排序的方法有很多,但简单地判断那一种算法最好,以 便能够普遍选用则是困难的。
比较
while (R[0].key<R[j].key) R[j+1]=R[j- -];
先后移,再j-1
R[ j+1]=R[0];
插入
}
}
01.12.2020
14
R[0]有两个作用:
其一: 是进入查找循环之前,保存 R[i] 的副本,使之不 至于因记录的后移而丢失R[i]中的内容;
其二: 是在 while 循环时,“监视”下标变量 j 是否越 界,一旦 越界(j<1),R[0]自动控制while循环的结束, 从而避免了在while 循环内的每一次都要检测 j 是否越 界( 即省略了循环条件j > -1)。
10
直接插入排序算法
InsertSort(DataType R[],int n) { int i,j;
DataType temp; for (i=0;i<n-1;i++) //n-1次 { temp=R[i+1];

数据结构+二叉树及遍历课件

数据结构+二叉树及遍历课件
最 的 点被称 根(root)。 root
A
B
C
D
E F GH I J
K
L
M
node
Ver. 1.0
4
课程13
数据结构和算法
定义树结构(续)
中的每一个 点在其 下可能有子 。
root A
B
C
D
E F GH I J
K
L
M
node
Ver. 1.0
5
课程13
数据结构和算法
树结构术语 我 来 构常用的一些 。 叶子 点:指没有子 点的 点。
C 点的度 1
D节点的度为2
D
A节点的度为3
B节点的度为4
J
K
L
M
Ver. 1.0
8
课程13
数据结构和算法
树结构术语(续)
兄弟:它指同一个 点的子 点。
A
B、C和D 点互 兄弟
点。
B
C
D
E、F、G和H互为兄弟节点。
E F GH I J
K
L
M
Ver. 1.0
9
课程13
数据结构和算法
树结构术语(续)
使用 接列表来 一个二叉 。 接表示中的每个 点都具有以下信息:
数据 左子 点的引用 右子 点的引用
如果一个 点不含有左子 点或右子 点,或一个子 点都没 有,相 的左(右)子 点字段就指向NULL。
Ver. 1.0
Data
Node
18
课程13
数据结构和算法
表示一个二叉树(续)
内部 点:它指根 点与叶子 点之 的中 点 。
点的 :它指一个 点与根 点之 的距离(按 点数 目 算)。根 点永 位于0 。

数据结构线性表栈队列二叉树图PPT课件

数据结构线性表栈队列二叉树图PPT课件
第22页/共40页
• 表达式a*(b+c)-d的后缀表达式是: A)abcd*+- B) abc+*d- C) abc*+dD) -+*abcd
• 假设一棵二叉树的后序遍历序列为DGJHEBIFCA,中序遍历序列为DBGEHJACIF, 则其前序遍历序列为 。
• 一棵二叉树的中序遍历序列为:DGBAECHF,后序遍历序列为:GDBEHFCA,则前 序列遍历序列是 __。
第36页/共40页
广度优先遍历: 从图中某个结点V0出发,访问此结点,然后依次访问与V0
邻接的、未被访问过的所有结点,然后再分别从这些结点出发 进行广度优先遍历,直到图中所有被访问过的结点的相邻结点 都被访问到。若此时图中还有结点尚未被访问,则另选图中一 个未被访问过的结点作为起点,重复上述过程,直到图中所有 结点都被访问到为止。
第25页/共40页
欧拉通过对柯尼斯堡桥问题的研究,于 1736年发表了著名的关于图论的论文,从而 创立了图论的学说。图1—2一类的问题就是 图论中所指的图。
第26页/共40页
又如,有6个足球队之间进行循环赛,他们 比赛的场次可以用图1-3(1)来表示。有3个 人相互写信,可以用图1—3(2)来表示。
• [定理1] 图G中所有顶点的度数之和等于边数的2倍。因为计算顶点的度数时。每条边均用到2次。 [定理2] 任意一个图一定有偶数个奇点。
第32页/共40页
连通:如果图中结点U,V之间存在一条从U通过若干条边、点到达V的通路,称U、 V是连通的。 连通图:如果一个无向图中,任一对不同顶点U、V,都有一条(U,V)通路,则 称图G是连通的。 强连通图:在有向图G中,每一对结点之间都有路径的图。 网络:带权的连通图。

数据结构 课件 二叉搜索树.ppt

数据结构 课件 二叉搜索树.ppt

搜索45 搜索成功
10 25 40 50
20 30
5
搜索过程是从根结点开始,沿某条路 径自上而下逐层比较判等的过程。
搜索成功,搜索指针将停留在树上某 个结点;搜索不成功,搜索指针将走 到树上某个结点的空子树。
设树的高度为h,最多比较次数不超过 h。
6
二叉搜索树的插入算法
为了向二叉搜索树中插入一个新元素,必须 先检查这个元素是否在树中已经存在。
如果根指针为NULL,则搜索不成功;否则用 给定值 x 与根结点的关键码进行比较: ✓若给定值等于根结点关键码,则搜索成功, 返回搜索成功信息并报告搜索到结点地址。
4
✓ 若给定值小于根结点的关键码,则继续 递归搜索根结点的左子树;
✓ 否则。递归搜索根结点的右子树。
搜索28
35
搜索失败 15
45
35
15
45
10 25 40 50
20 30
插入新结点28 28
8
例:在下述二叉排序树中插入值为11、53的结点。
插入值为11的结点
插入值为53的结点
11
53
45
12
65
4
23 53
87
11 20
72 80
9
例:设关键字的输入序列为45,24,53,12,28,90, 按上述算法生成一棵二叉排序树。
53 右子树空, 用
17 78 左子女顶替
53 17 78
09 45 65 87
09 23 65 87
23 删除45
14
53 删除78
53
17 78
17 94
左子树空, 用
09 23 94 右子女顶替 09 23 88
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
顺序查找表的缺点:平均查找长度比较大,特别是当n 较大时,查找效率较低。
2)折半查找(有序表上进行查找):
基本思想:设三个指针low,high和mid分别指示待查有 序表的表头,表尾和中间元素,在开始查找时,三个 指针的初值分别为:low:=1;high:=n;mid:=(low+high) div 2 。折半查找是从表的中间元素开始,用待查元 素的关键字k和r[mid].key比较,此时有三种情况 (假 设该查找表按关键字的非递减次序排列) :
a2
2a
-1 b ar h-1 h-1 b1 1 c
LR(逆时针)
2 c ar h-1 0 b cr h-2
c1 cr h-2 h-1
h-1 bl c1 h-1
再以c为轴心,把a从c的左上方转到c的右下方,使得
c的右是a,左是b,原c的右子树变成a的左。
ቤተ መጻሕፍቲ ባይዱ2a
2c
ar h-1
0c 0 b a -1
0 b cr h-2
查找表
1.建表:Create(st)
静态查找表 2.查找:Search(st,k)
3.读表元:Get(st,pos)
1.初始化:Initiate(st) 2.查找:Search(st,k)
动态查找表 3.读表元:Get(st,pos)
4.插入:Insert(st,k) 5.删除:Delete(st,k)
ASL=∑PiCi
Pi :为查找表中第i个元素的概率 Ci :为查到表中第i个元素时已经进行的比较次数
在顺序查找时, Ci取决于所查元素在表中的位置, Ci =i,设每个元素的查找概率相等,即Pi=1/n,则:
ASL=∑PiCi=(n+1)/2
查找不成功的查找长度为n+1。
顺序查找表的优点:算法简单且适应面广,对表的结 构无任何要求,无论元素是否按关键字有序都可应用。
1)若r[mid].key=k,则查找成功;
2) 若r[mid].key>k,则k必在较低标号的那一半表中, 令 high=mid-1
3) 若r[mid].key<k,则k必在较高标号的那一半表中, 令low=mid+1
再取中间项进行比较,直到查找成功或low>high (查找失败)为止。
例:给出表元素关键字为:{05,13,19,21,37,56,64,75,80,88,92}
R1的右子树的根结点; 3)对R3,R4,…Rn重复上述步骤2);
二叉排序树的平衡化
假设表中的关键字序列为(13,24,37,90,53) ①空树和一个结点 13 的二叉树显然是平衡二叉树 . ②插入24后仍平衡 13 -1
24 0
③插入 37 后结点 13的平衡因子为0-2=-2,不平衡
13 -2
b0
RR
0 a br h
h-1 a1 b1 h-1
把结点b从a的右下侧逆时针(左转)转到a的右上侧, 原b的左成为a的右,新b的左为a
2.LL型平衡旋转:
a2
LL
1 b ar h-1
b0 h b1 a 0
h b1 br h-1
h-1 br ar
把结点b从左下侧顺转(右转)转到a的左上侧,原b的右 成为a的左,新b的右为a。
⑴判别插入节点之后是否产生不平衡; ⑵找到失去平衡的最小子树; ⑶判别旋转类型并作相应调整处理。
从平衡树的定义可知,平衡树上所有节点的平衡因子的 绝对值都不超过1,在插入节点之后,若排序树上的某个 节点的平衡因子的绝对值大于1,则说明出现不平衡。同 时,失去平衡的最小子树的根节点必为离插入节点
最近,而且插入之前的平衡因子的绝对值大于0(在插入节点之 后,其平衡因子的绝对值才大于1)的祖先节点。为此需要做到:
h-1 a1 c -1
RL(逆时针)
c0
0a
b -1
h-1 c1 b -1
h-2 cr br h-1
h-1 a1 c1 cr br h-1 h-2
以c为轴心,把a从c的左上方,转到c的左下方,使 得c的左是a,右是b,原c的左子树变成a的右。 4.LR型平衡旋转:
以c为轴心把b从c的左上侧,逆时针(左转)到c的左 下侧,从而a的左是c,c的左是b,原c的左变成新b的右。
3.RL型平衡旋转: a -2
h-1 a1 b 1
RL(顺时针)
a -2
h-1 a1 c -1
1 c br h-1
h-1 c1 b -1
h-1 c1 cr h-2
h-2 cr br h-1
以c为轴心,把b从c的右上侧顺时针(右转)到c的右 下侧,从而a的右是c,c的右是b,原c的右变成b的左。
a -2
LR(顺时针) h-1 bl c1 cr ar h-1
h-1 bl c1 h-1
h-2
上述四种情况,1与2对称,3与4对称,旋转的正确 性容易由“遍历所得中序序列不变”证明之。
从上面的例子可见,平衡旋转是当排序树在 插入节点后产生不平衡时进行的。由此,为了使 从关键字序列得到的排序树为平衡树,则需对建 立二叉排序树的插入过程算法做如下修改。
{low=mid+1;Binsrch(r,k,low,high);} else if(k==r[mid].key)
{printf(mid);Return;} else if (k<r[mid].key)
{high=mid-1; Binsrch(r,k,low,high);} }
把 24 从 13 的右下侧
24 -1
左转到 13 的右上侧
37 0
原来 24 的左为 13 的右, 新的 24 的左为 13
RR型即逆时针旋转
24 13 37
④插入90,53后,又失去平衡, 可经过下列步骤转化为平衡二叉树
24 _ 2
0 13
37 _ 2
90 1
24 13 37
53
24 13 53
else { high=mid-1;//向左找
if (low>high){printf(“no succ\n”);break;} }
}
}
递归算法描述如下:
void Binsrch (sqtable r, KeyType,int low,int high) {
low=l; high=h; if (high<low) {printf(‘Unsucc’);Return;} mid=(low+high) / 2; if (k>r[mid].key)
(2) low=7;high=11;mid=(7+11) / 2=9
05 13 19 21 37 56 64 75 80 88
low
mid
因为r[mid].key<k,所以向右找,令low:=mid+1=10
(3) low=10;high=11;mid=(10+11) / 2=10
high
92
high
05 13 19 21 37 56 64 75 80 88 92
low
mid
high
因为r[mid].key<k,所以向右找,令low:=mid+1=4
(3) low=4;high=5;mid=(4+5) div 2=4
05 13 19 21 37 56 64 75 80 88 92
low mid high
1.查找关键字k=21 的情况 (1) low:=1;high:=11;mid:=(1+11) div 2=6
05 13 19 21 37 56 64 75 80 88 92
low
mid
high
因为r[mid].key>k,所以向左找,令high=mid-1=5
(2) low=1;high=5;mid=(1+5) / 2=3
while (r[i]!=k) i++; if (i<n) printf(“succ, i=%d”,i);//查找成功,i指示待查元素在表中位置 else printf(“unsucc”);//i=n时表明查找不成功 }
平均查找长度:为确定某元素在表中某位置所进行的比 较次数的期望值。
在长度为n的表中找某一元素,查找成功的平均查找长度:
★ 基本概念 查找表:是一种以集合为逻辑结构,以查找为核心运算,
同时包括其他运算的数据结构。
关键字:用来标识数据元素的数据项,简称键。
主关键字:可以唯一标识一个数据元素的关键字。
次关键字:可以标识若干数据元素的关键字。
查找:根据某个给定的K值,在查找表中寻找 一 个键值等于K的元素,若找到这样的元素, 则称查找成功,此时的运算结果为该数据元 素在查找表中的位置,否则称查找不成功, 运算结果为一特殊标志。
⑴在查找s节点的插入位置的过程中,记下离s节点最近, 且平衡因子不等于0的节点,令指针a指向该节点。 ⑵修改自a到s的路径上所有的节点的平衡因子值; ⑶判别树是否失去平衡,即在插入节点之后,a节点的平 衡因子的绝对值是否大于1,若是,则需要判别旋转类型, 并做相应处理,否则插入过程结束。
void AVL-insert(x,y,t) //把标志符x插入树根为t的AVL树中。设每个结点具有 四个域:data、Lchild、Rchild和一个2位的平衡因子 bf。将y置成y->data=x,t=NULL
low=1; high=n;//置初值 while(low<=high) { mid=(low+high)/2;
if (k==r[mid].key) {printf(“succ i=%d\n”,mid);break;} else if ( k>r[mid].key) { low=mid+1;//向右找 if (low>high){ printf("no succ\n");break; } }
相关文档
最新文档