数据结构 特殊二叉树

合集下载

数据结构(C语言版)严蔚敏第6章 树和二叉树

数据结构(C语言版)严蔚敏第6章 树和二叉树
如图6-1(b)中结点H、I、J、K、L、M、N是叶子 结点,而所有其它结点都是分支结点。
⑷ 孩子结点、双亲结点、兄弟结点
一个结点的子树的根称为该结点的孩子结点(child) 或子结点;相应地,该结点是其孩子结点的双亲结点 (parent)或父结点。
4
如图6-1(b)中结点B 、C、D是结点A的子结点,而结 点A是结点B 、C、D的父结点;类似地结点E 、F是结 点B的子结点,结点B是结点E 、F的父结点。
这是树的递归定义,即用树来定义树,而只有 一个结点的树必定仅由根组成,如图6-1(a)所示。
2
2 树的基本术语
⑴ 结点(node):一个数据元素及其若干指向其子树的分支。 ⑵ 结点的度(degree) 、树的度:结点所拥有的子树
的棵数称为结点的度。树中结点度的最大值称为树的度。
A
B
C
D
A
E
F G HI J
同一双亲结点的所有子结点互称为兄弟结点。
如图6-1(b)中结点B 、C、D是兄弟结点;结点E 、 F是兄弟结点。
⑸ 层次、堂兄弟结点
规定树中根结点的层次为1,其余结点的层次等于 其双亲结点的层次加1。
若某结点在第l(l≧1)层,则其子结点在第l+1层。
双亲结点在同一层上的所有结点互称为堂兄弟结点。 如图6-1(b)中结点E、F、G、H、I、J。
(a) 只有根结点
K
LM N
图6-1 树的示例形式
(b) 一般的树
3
如图6-1(b)中结点A的度是3 ,结点B的度是2 ,结点 M的度是0,树的度是3 。
⑶ 叶子(left)结点、非叶子结点:树中度为0的
结点称为叶子结点(或终端结点)。相对应地,度不为 0的结点称为非叶子结点(或非终端结点或分支结点)。 除根结点外,分支结点又称为内部结点。

完全二叉树的节点数计算公式

完全二叉树的节点数计算公式

完全二叉树的节点数计算公式二叉树是一种常见的树形结构,它的每个节点最多有两个子节点。

而完全二叉树是一种特殊的二叉树,它的所有层级都被填满,除了最后一层,最后一层的节点从左到右填充。

完全二叉树在数据结构中应用广泛,因为它的节点数可以通过一个简单的公式来计算。

完全二叉树的定义完全二叉树是一种特殊的二叉树,它的所有层级都被填满,除了最后一层,最后一层的节点从左到右填充。

这意味着完全二叉树的节点数是可以计算的,而且它的形状和结构是唯一的。

完全二叉树的性质完全二叉树具有以下性质:1. 如果一个完全二叉树的深度为h,那么它的节点数在2^(h-1)到2^h-1之间。

2. 如果一个完全二叉树的节点数为n,那么它的深度为log2(n+1)。

3. 如果一个完全二叉树的节点编号从1开始,那么它的父节点编号为i/2,左子节点编号为2i,右子节点编号为2i+1。

完全二叉树的节点数计算公式完全二叉树的节点数可以通过一个简单的公式来计算。

假设完全二叉树的深度为h,那么它的节点数为2^h-1。

这个公式的原理是利用完全二叉树的性质1。

因为完全二叉树的深度为h,所以它的最后一层有2^(h-1)个节点。

除了最后一层,完全二叉树的其他层都有满的节点数,因此它的节点数为2^(h-1)-1+2^(h-2)-1+...+2^0-1=2^h-1。

完全二叉树的节点数计算实例假设我们有一个深度为3的完全二叉树,它的节点数为7。

我们可以使用完全二叉树的性质2来计算它的深度,得出深度为2。

然后,我们可以使用完全二叉树的节点数计算公式来计算它的节点数,得出节点数为2^2-1=3。

完全二叉树的节点数计算应用完全二叉树的节点数计算公式在算法和数据结构中应用广泛。

它可以用来计算完全二叉树的节点数,从而优化算法的时间和空间复杂度。

它也可以用来验证二叉树是否为完全二叉树,以及计算二叉树的深度和高度。

完全二叉树的节点数计算公式还可以用于解决实际问题。

例如,在计算机科学中,完全二叉树可以用来表示堆,堆是一种常见的数据结构,用于实现优先队列和排序算法。

斐波那契数列二叉树

斐波那契数列二叉树

斐波那契数列二叉树斐波那契数列是一种非常有趣的数列,它的每一项都是前两项的和。

例如,斐波那契数列的前几项是1、1、2、3、5、8、13、21、34、55、89、144……这个数列在数学和计算机科学中都有广泛的应用,其中一个应用就是构建斐波那契数列二叉树。

斐波那契数列二叉树是一种特殊的二叉树,它的每个节点都对应着斐波那契数列中的一个数。

具体来说,根节点对应着第n项斐波那契数,左子树对应着第n-1项斐波那契数,右子树对应着第n-2项斐波那契数。

这样,我们就可以通过斐波那契数列来构建一棵二叉树。

斐波那契数列二叉树的构建过程非常简单,我们可以使用递归的方式来实现。

具体来说,我们可以定义一个函数fibonacciTree(n),它的返回值是一棵斐波那契数列二叉树,其中n表示根节点对应的斐波那契数列的下标。

函数的实现如下:```class TreeNode:def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = rightdef fibonacciTree(n):if n == 0:return TreeNode(0)elif n == 1:return TreeNode(1)else:left = fibonacciTree(n-1)right = fibonacciTree(n-2)return TreeNode(left.val + right.val, left, right)```在这个函数中,我们首先判断n的值,如果n为0或1,则直接返回一个只有根节点的二叉树。

否则,我们递归地构建左子树和右子树,然后将它们的值相加作为根节点的值,最后返回一棵完整的二叉树。

使用上面的代码,我们可以构建出斐波那契数列二叉树的任意一棵子树。

例如,如果我们想构建第5项斐波那契数列对应的子树,可以调用fibonacciTree(5)函数,得到如下的二叉树:```5/ \3 2/ \ / \2 1 1 1```这棵二叉树的根节点对应着第5项斐波那契数,左子树对应着第4项斐波那契数,右子树对应着第3项斐波那契数。

数据结构之二叉树(BinaryTree)

数据结构之二叉树(BinaryTree)

数据结构之⼆叉树(BinaryTree)⽬录导读 ⼆叉树是⼀种很常见的数据结构,但要注意的是,⼆叉树并不是树的特殊情况,⼆叉树与树是两种不⼀样的数据结构。

⽬录 ⼀、⼆叉树的定义 ⼆、⼆叉树为何不是特殊的树 三、⼆叉树的五种基本形态 四、⼆叉树相关术语 五、⼆叉树的主要性质(6个) 六、⼆叉树的存储结构(2种) 七、⼆叉树的遍历算法(4种) ⼋、⼆叉树的基本应⽤:⼆叉排序树、平衡⼆叉树、赫夫曼树及赫夫曼编码⼀、⼆叉树的定义 如果你知道树的定义(有限个结点组成的具有层次关系的集合),那么就很好理解⼆叉树了。

定义:⼆叉树是n(n≥0)个结点的有限集,⼆叉树是每个结点最多有两个⼦树的树结构,它由⼀个根结点及左⼦树和右⼦树组成。

(这⾥的左⼦树和右⼦树也是⼆叉树)。

值得注意的是,⼆叉树和“度⾄多为2的有序树”⼏乎⼀样,但,⼆叉树不是树的特殊情形。

具体分析如下⼆、⼆叉树为何不是特殊的树 1、⼆叉树与⽆序树不同 ⼆叉树的⼦树有左右之分,不能颠倒。

⽆序树的⼦树⽆左右之分。

2、⼆叉树与有序树也不同(关键) 当有序树有两个⼦树时,确实可以看做⼀颗⼆叉树,但当只有⼀个⼦树时,就没有了左右之分,如图所⽰:三、⼆叉树的五种基本状态四、⼆叉树相关术语是满⼆叉树;⽽国际定义为,不存在度为1的结点,即结点的度要么为2要么为0,这样的⼆叉树就称为满⼆叉树。

这两种概念完全不同,既然在国内,我们就默认第⼀种定义就好)。

完全⼆叉树:如果将⼀颗深度为K的⼆叉树按从上到下、从左到右的顺序进⾏编号,如果各结点的编号与深度为K的满⼆叉树相同位置的编号完全对应,那么这就是⼀颗完全⼆叉树。

如图所⽰:五、⼆叉树的主要性质 ⼆叉树的性质是基于它的结构⽽得来的,这些性质不必死记,使⽤到再查询或者⾃⼰根据⼆叉树结构进⾏推理即可。

性质1:⾮空⼆叉树的叶⼦结点数等于双分⽀结点数加1。

证明:设⼆叉树的叶⼦结点数为X,单分⽀结点数为Y,双分⽀结点数为Z。

《二叉树的概念》课件

《二叉树的概念》课件
过程中进行一些特定的操作。
05
二叉树的应用
Chapter
在数据结构中的应用
二叉搜索树
二叉搜索树是一种特殊的二叉树,它的每个节点的左子树上的所有元素都小于 该节点,右子树上的所有元素都大于该节点。这种数据结构可以用于快速查找 、插入和删除操作。
AVL树和红黑树
这两种二叉树都是自平衡二叉搜索树,它们通过调整节点的左右子树的高度来 保持树的平衡,从而在插入、删除等操作时具有较好的性能。
VS
详细描述
平衡二叉树的特点是,它的左右子树的高 度差不会超过1,且左右子树都是平衡二 叉树。平衡二叉树的性质还包括,它的所 有叶节点的层数相等,且所有非叶节点的 左右子树的高度差不超过1。平衡二叉树 的查找、插入和删除操作的时间复杂度为 O(log n),其中n为节点数。
04
二叉树的遍历
Chapter
决策树
在机器学习和人工智能领域,决策树 是一种重要的分类和回归方法。其基 础结构就是二叉树,通过构建决策树 ,可以解决分类和回归问题。
THANKS
感谢观看
代码表示法
总结词:严谨规范
详细描述:使用编程语言的语法结构来表示二叉树,每个节点用对象或结构体表示,节点间的关系通 过指针或引用表示,严谨规范,易于编写和调试。
03
二叉树的性质
Chapter
深度最大的二叉树
总结词
深度最大的二叉树是指具有最大 可能深度的二叉树。
详细描述
在二叉树中,深度最大的二叉树 是满二叉树,即每个层级都完全 填满,没有空缺的节点。满二叉 树的深度等于其节点总数减一。
02
二叉树的表示方法
Chapter
图形表示法
总结词:直观明了
详细描述:通过图形的方式展示二叉树的结构,每个节点用圆圈或方框表示,节 点间的关系用线段表示,直观易懂,易于理解。

数据结构二叉排序树

数据结构二叉排序树

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
low
21
37
56
64
75
80
88
92
mid high
因为r[mid].key=k,查找成功,所查元素在表中的序号为mid 的值
平均查找长度:为确定某元素在表中某位置所进行的比 较次数的期望值。 在长度为n的表中找某一元素,查找成功的平均查找长度:
ASL=∑PiCi
Pi :为查找表中第i个元素的概率 Ci :为查到表中第i个元素时已经进行的比较次数
在顺序查找时, Ci取决于所查元素在表中的位置, Ci =i,设每个元素的查找概率相等,即Pi=1/n,则:
RL型的第一次旋转(顺时针) 以 53 为轴心,把 37 从 53 的左上转到 53 的左下,使得 53 的左 是 37 ;右是 90 ,原 53 的左变成了 37 的右。 RL型的第二次旋转(逆时针)
一般情况下,假设由于二叉排序树上插入结点而失去 平衡的最小子树的根结点指针为a(即a是离插入结点最 近,且平衡因子绝对值超过1的祖先结点),则失去平衡 后进行调整的规律可归纳为下列四种情况: ⒈RR型平衡旋转: a -2 b -1 h-1 a1
2.查找关键字k=85 的情况 (1) low=1;high=11;mid=(1+11) / 2=6
05
13
19
21

数据结构哈夫曼树构造,注意事项

数据结构哈夫曼树构造,注意事项

数据结构哈夫曼树构造,注意事项哈夫曼树(Huffman Tree)是一种特殊的二叉树,其中每个叶子节点对应一个字符,且哈夫曼树是一颗无歧义的前缀编码树(又称为最优二叉树),它将数据中出现频率最高的字符用较短的编码表示,出现频率较低的字符用较长的编码表示,从而可以压缩数据,使得压缩后的数据占用更少的存储空间。

哈夫曼树的构造过程非常重要,下面介绍一下哈夫曼树构造的注意事项。

1. 确定字符的权值哈夫曼树的构造依赖于各个字符在数据中出现的权值,权值表示字符在数据中出现的频率,出现频率越高的字符权值越大。

权值的确定对哈夫曼树的构造非常关键,因为它决定了每个字符在哈夫曼树中出现的位置和编码长度。

2. 选择合适的合并方式哈夫曼树的构造需要不断的合并节点,最终形成一颗完整的二叉树,因此选择合适的合并方式非常重要。

常见的合并方式有两种,一种是将权值最小的两个节点合并成一个父节点,称为小根法;另一种是将权值最大的两个节点合并成一个父节点,称为大根法。

选择哪种合并方式取决于需要生成的哈夫曼树的形态,通常情况下,我们使用小根法,因为它能够生成一个权值较小的哈夫曼树。

3. 构建哈夫曼树的过程哈夫曼树的构造过程是按照从小到大的顺序合并节点,直到整个二叉树合成一颗完整的哈夫曼树。

具体步骤如下:a. 将字符按照权值从小到大排序。

b. 选择权值最小的两个字符进行合并,并创建一个新节点作为它们的父节点,将新节点的权值设为两个子节点的权值之和。

c. 依次取出权值最小的两个字符,重复第 b 步。

d. 直到剩下的节点只有一个,它就是哈夫曼树的根节点。

4. 构造哈夫曼编码表为了便于对数据进行解压缩,需要将每个字符映射到一个对应的二进制编码,这个编码称为哈夫曼编码。

哈夫曼编码需要利用哈夫曼树的结构,对每个字符进行遍历,记录下该字符所经过的每个节点的路径,并将路径上的方向标识为 0 或 1,最终得到该字符所对应的哈夫曼编码。

由于哈夫曼编码是一种前缀编码,因此可能存在解码时出现的二义性,为了解决这个问题,需要在哈夫曼编码的过程中进行优化。

数据结构——- 二叉树

数据结构——- 二叉树

证明: 5.1 二叉树的概念
(1)总结点数为 ●二叉树的主要性质 n=n0+n1+n2 (2)除根结点外,每个 ●性质3: 结点都有一个边e进入 任何一棵二叉树,若其终端结点数为n0, n=e+1 度为2的结点数为n2,则n0=n2+1 (3)边e又是由度为1或2 A 的点射出,因此 e=n1+2n2 G B (4)由(2)(3) F C D n=n1+2n2+1 (5)由(4)-(1)可得 G n0=n2+1
《数据结构与算法》
★★★★★
第五章 二叉树
廊坊师范学院 数学与信息科学学院
树型结构--实例:五子棋
A
B
D
E
F
C
…...........
…...........
第五章 二叉树
本章重点难点
重点: 二叉树的定义,性质,存储结 构以及相关的应用——遍历,二叉搜 索树,堆优先 队列,Huffman树等 难点: 二叉树的遍历算法及相关应用
证明: 5.1 二叉树的概念
(1)总结点数为 ●二叉树的主要性质 n=n0+n1+n2 (2)除根结点外,每个 ●性质3: 结点都有一个边e进入 任何一棵二叉树,若其终端结点数为n0, n=e+1 度为2的结点数为n2,则n0=n2+1 (3)边e又是由度为1或2 A 的点射出,因此 e=n1+2n2 G B (4)由(2)(3) F C D n=n1+2n2+1 (5)由(4)-(1)可得 G n0=n2+1
A B C E D F G
证明: 由性质4可推出
由性质2(深度为k的 二叉树,至多有2k+1-1 个结点)可知,高度 为h(k+1)的二叉树,其 有n (n>0)个结点的完全二叉树的高度为 结点个数n满足: 「log2(n+1) ,深度为「log2(n+1) -1 2h-1-1<n<=2h-1 高度:二叉树中最大叶结点的层数+1 2h-1<n+1<=2h 取对数得到: 0层 1 h-1<log2(n+1)<=h 3 1层 2 因为h是整数,所以 h= log2(n+1) 5 2层 4
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

7 7 7
5 2 4
9
2 4 5 7 9 7 5 2 4 9
WPL(T1)=7×4+9×4+5×3+4×2+2×1=89 × × × × × WPL(T2) =7×2+5×2+ × × 2×3+4×3+9×2=60 × × ×
6.3.2 构造哈夫曼树
(1) 根据与n个权值{w1,w2,…,wn} 根据与n 对应的n个结点构成具有n 对应的n个结点构成具有n棵 二叉树的森林 F={T1,T2,…,Tn}, 其中每棵二叉树T 其中每棵二叉树Ti(1≤i≤n) 都只有一个权值为w 的根结点, 都只有一个权值为wi的根结点, 其左、右子树均为空; 其左、右子树均为空; 5 6 2 9 7
其双亲结点的相应指针域改为“ 其双亲结点的相应指针域改为“指向 被删除结点的左子树或右子树” 被删除结点的左子树或右子树”。
右子树为空只需重接它的左子树 q = p; p = p->left; delete(q);
p p
左子树为空只需重接它的右子树 q = p; p = p->right; delete(q);
两个问题: 两个问题:
如何“建堆” 如何“建堆”? 完全二叉树 如何“筛选” 如何“筛选”? 调整为堆
“筛选”指的是,对一棵左/右子树均 筛选”指的是,对一棵左/ 为堆的完全二叉树, 调整” 为堆的完全二叉树,“调整”根结点 使整个二叉树也成为一个堆。 使整个二叉树也成为一个堆。 筛 选 堆 堆
第六章 特殊二叉树
二叉搜索树 堆 哈夫曼树
6.1 二叉搜索树
6.1.1 二叉搜索树的定义
1.定义 2.查找算法 4.删除算法 5.查找性能的分析 3.插入算法
6.1.1 二叉搜索树的定义
30
20 二叉搜索树(Binany 二叉搜索树(Binany Searching Tree)40 又称二叉排序树(Binary 又称二叉排序树(Binary SortingTree) 10 25 35 或者是一棵空树; 或者是一棵空树;或者是具有如下特性 的二叉树: 的二叉树: 23 不空, (3)它的左、右子树本身分别是一棵 1)它的左、 若它的左子树不空, 则左子树 不空, (2)若它的右子树不空,则右子树 ( 均小于根结 上所有结点的关键字均大于根结 所有结点的关键字 均小于根结 上所有结点的关键字均大于根结 二叉搜索树。 二叉搜索树。 的关键字; 点的关键字; 的关键字; 点的关键字;
40 , 55 , 49 , 73, 12, 27, 98, 81, 64, 36
向堆中插入一个元素
1、按完全二叉树排列 、 2、筛选 、
18 26 73 48 2 3 4 5 60 6 7 8 9 35 30
0 1
18 26 30 73 48 60 35
35 30
void InsertHeap(Heap& T, ElemType item) { T.heap[T.size]=item; heap[T.size]=item; T.size++; size++; //向堆尾添加新元素 //向堆尾添加新元素 ElemType x=item; //将新元素暂存x中 x=item; //将新元素暂存 将新元素暂存x int i=T.size-1; i=T.size//用i指向待调元素位置 //用 while(i!=0 while(i!=0) { int j=(i-1)/2; j=(i- )/2 //j指向i元素的双亲 //j指向 指向i if(x>=T. if(x>=T.heap[j]) break; //调整结束 break; //调整结束 T.heap[i]=T.heap[j]; //双亲下移 heap[i]=T.heap[j]; //双亲下移 i=j; } i=j; //调整元素改为双亲 //调整元素改为双亲 T.heap[i]=x; } //把新元素调到最终位置 heap[i]=x; //把新元素调到最终位置
q p s
(3)被删除的结点有左右子树 )被删除的结点有左右子树 被删关键字 = 50 50 30 80 20 40 60 90 35 32 85 88
以其后继替代之, 以其后继替代之,然后再删除 后继结点
6.2 堆
36 65 40
81 73 55 49 6.2.1 堆的定义 堆(Heap) 是具有如下特性的一棵 完全二叉树: 完全二叉树: 若根结点存在左 孩子, (1)若根结点存在左、右孩子,则根 结点的值小于等于 或大于等于) 小于等于( 结点的值小于等于(或大于等于)左 孩子结点的值; 、右孩子结点的值; 以左、 (2)以左、右孩子为根的子树又各 是一个堆。 是一个堆。
二叉搜索树 的插入算法
38 26 35 28 50 55 62 94
依次插入: 依次插入 (38,26,62,94,35,50,28,55) , , , , , , ,
4.二叉搜索树的删除算法
可分三种情况讨论: 可分三种情况讨论: 三种情况讨论 (1)被删除的结点是叶子; 被删除的结点是叶子 是叶子; (2)被删除的结点只有左子树 被删除的结点只有左子树 或者只有右子树 只有右子树; 或者只有右子树; 被删除的结点既有左子树 既有左子树, (3)被删除的结点既有左子树, 也有右子树。 也有右子树。
堆是满足下列性质的数列{r 堆是满足下列性质的数列{r1, r2, …,rn}: …,
ri ≤ r2i ri ≤ r2i+1
(小顶堆) 小顶堆)

ri ≥ r2i ri ≥ r2i+1
(大顶堆) 大顶堆)
i= 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 12, 36, 27, 65, 40, 34, 98, 81, 73, 55, 49
是小顶堆
12, 36, 27, 65, 40, 14, 98, 81, 73, 55, 49 14,
不是堆
对于完全二叉树 r2i 是 ri 的左孩子 r2i+1 是 ri 的右孩子
12 36 65 81 73 55 40 49
ri r2i r2i+1
27 34 14 98
不 是堆
堆的顺序存储类型 struct Heap { ElemType heap[HeapMaxSize] ; int size; }; // HeapMaxSize为已经事先 为已经事先 定义的全局常量
3.二叉搜索树的插入算法
若二叉搜索树为空树, 若二叉搜索树为空树,则新插入的结 点为根结点;否则,新插入的结点 否则, 必为一个叶子结点,其插入位置由 查找过程得到。 查找过程得到。?????
二叉搜索树的插入算法
void Insert(BTreeNode *&BST,const ElemType &item) { if(BST==NULL) { BTreeNode *p=new BTreeNode; p->data=item; p->left=p->right=NULL; >left=pBST=p; } else if(item<BST->data)Insert(BST->left,item); if(item<BST->data)Insert(BST Insert(BSTelse Insert(BST->right,item); Insert(BST-
6.3 哈夫曼树
最优树的定义 如何构造最优树
结点的权和带权路径长 权 度 给结点赋上一个有某 种意义的实数, 种意义的实数,我们称 为权。 带权路径长度 5 9 7 从树根结点到该结点 2 4 之间的路径长度与该结 点上权的乘积。 点上权的乘积。
树的带权路径长度 树中所有叶子结点的带权路径 长度之和 WPL=
6.1.3 二叉搜索树的运算 1. 查找 若二叉搜索树为空,则查找 否则, 不成功;否则,若给定值 1)等于根结点的关键字,则查找成功; 等于根结点的关键字,则查找成功; 根结点的关键字 2)小于根结点的关键字,则继续在左 根结点的关键字, 子树上查找; 子树上查找; 3)大于根结点的关键字,则继续在右 根结点的关键字, 子树上查找。 子树上查找。
p p
以其前驱替代之, 以其前驱替代之,然 (3)被删除的结点有左右子树 )被删除的结点有左右子树 后再删除该前驱结点 被删关键字 = 50 40 50 30 80 20 40 90
35 32 85 88
前驱结点 被删结点
如何查找前驱
30 20 35 32
p
50 80 40 45 85 88 90
筛选
12 73 81 64 73 55 12 64 98 12 是大顶堆 36 81 12 98
比较
49 40
27
建堆是一个从下往上进行“筛选” 建堆是一个从下往上进行“筛选” 的过程。 的过程。
98 40 81 55 81 73 55 73 81 64 12 36 36 12 27 98 49 40 49 98
23 设 key = 48
T 20 10 T 23 T 25
T T 30 T 40 35 T
bool Find(BTreeNode* T, ElemType& item) while(T!=NULL) = { if(item==T->data) { item=T->data; return true } true; else if(item<T->data) < T=T->left; //向左子树继续查找 向左子树继续查找 else T=T->right; //向右子树继续查找 向右子树继续查找 return false;}
45 85
90
88
p->data = s->data; q->rchild = s->lchild;
相关文档
最新文档