数据结构复习2015剖析.ppt

数据结构复习2015剖析

* 在邻接表表示的情况下如何求入度和出度 * 深度/广度优先遍历结果 * * * 利用二叉排序树插入算法建立二叉排序树的例子: 设有一个结点关键玛的输入序列为{53,68,55,17,82,10,45},从空的二叉排序树开始,一个结点一个结点逐步插入,最终建立一个二叉排序树。 53 53 68 53 68 55 53 68 55 17 53 68 55 17 82 53 68 55 17 82 10 53 68 55 17 82 10 45 (1)被删除的结点是叶子; (2)被删除的结点只有左子树或者只有右子树; (3)被删除的结点既有左子树,也有右子树。 可分三种情况讨论: 和插入相反,删除在查找成功之后进行,并且要求在删除二叉排序树上某个结点之后,仍然保持二叉排序树的特性。 二叉排序树的删除 p左、右子树均非空 沿 P 左子树的根 C 的右子树分支找到 S,S的右子树为空,将 S 的左子树成为 S 的双亲Q 的右子树,用 S 取代 p (5) F P C PR CL Q QL S SL 中序遍历:CL C QL Q SL S P PR F F S C PR CL Q QL SL 中序遍历:CL C QL Q SL S PR F (5) 二叉排序树的删除 P左、右子树均非空 若 C 无右子树,用 C 取代 P (6) F P C PR CL 中序遍历:CL C P PR F F C PR CL 中序遍历:CL C PR F (6) 二叉排序树的删除 要删除二叉排序树中的p结点,分三种情况: P为叶子结点,只需修改 P 双亲 F的指针: F-lchild=NULL F-rchild=NULL P只有左子树或右子树 P只有左子树,用P的左孩子代替P (1)(2) P只有右子树,用P的右孩子代替P (3)(4) p左、右子树均非空 沿 P 左子树的根 C 的右子树分支找到 S,S的右子树为空,将 S 的左子树成为 S 的双亲Q 的右子树,用 S 取代 P (5) 若 C 无右子树,用 C 取代 P (6) 二叉排序树的删除 应用实例—赫夫曼树 构造赫夫曼树步骤 根据给定的n个权值 {w1, w2, ……wn},构造n棵只有根结点的二叉树,令其权值为wj; 在森林中选取两棵根结点权值最小的树作左右子树,构造一棵新的二叉树,置新二叉树根结点权值为其左右子树根结点权值之和; 在森林中删除这两棵树,同时将新得到的二叉树加入森林中; 重复上述两步,直到只含一棵树为止,这棵树即赫夫曼树。 赫夫蔓编码(数据通信用的二进制编码) 用赫夫曼树可以构造一种不等长的二进制编码,并且构造所得的赫夫曼编码是一种最优前缀编码,即使得所传电文的总长度最短。 思想:根据字符出现频率编码,使电文总长最短。 编码:根据字符出现频率构造赫夫曼树,然后将树中结点引向其左孩子的分支标为“0”,引向其右孩子的分支标为“1”;每个字符的编码即为从根到每个叶子的路径上得到的0、1序列。 应用实例—赫夫曼树 例: 假定用于通信的电文仅由5个字母c1,c2,c3,c4,c5组成,各字母在电文中出现的频率分别为5,6,2,9,7。试为这5个字母设计不等长的赫夫曼编码,并给出该电文的总码数。 字母集{c1,c2,c3,c4,c5}, 频率{ 5, 6, 2, 9, 7 } 9 5 6 2 7 5 2 7 6 9 7 6 7 13 9 5 2 7 6 7 13 9 5 2 7 9 5 2 7 16 6 7 13 29 0 0 0 0 1 1 1 1 00 01 10 110 111 c2 c5 c4 c1 c3 赫夫曼编码: c1 c2 c3 c4 c5 110 00 111 10 01 电文总码数: 5*3+6*2+2*3+9*2+7*2=55 图——基本概念 图的定义 图(Graph)——图G是由两个集合V(G)和E(G)组成的,记为G=(V,E) 其中:V(G)是顶点的非空有限集 E(G)是边的有限集合,边是顶点的无序对或有序对。 例如: G1=V1,E1 V1={ v0 ,v1,v2,v3,v4 } E1={(v0,v1),(v0,v3),(v1,v2),(v1,v4),(v2,v3)(v2,v4)} V0 V4 V3 V1 V2 图的术语与定义 图的定义 有向图——有向图G

文档评论(0)

1亿VIP精品文档

相关文档