- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章树和二叉树分析
CAST CAST SAT AT A TASA A : 0 T : 10 C : 110 S : 111 它的总编码长度:7*1+5*2+( 2+4 )*3 = 35。比等长编码的情形要短。 总编码长度正好等于霍夫 曼树的带权路径长度WPL。 霍夫曼编码是一种无前缀 编码(都由叶结点组成,路径 不会重复)。解码时不会混淆。 霍夫曼编码: A : 0 T : 10 C : 110 S : 111 110011110 11001111011101001001001110 等长编码: A : 00 T : 10 C : 01 S : 11 010011100100111011001000100010001100 霍夫曼编码树 0 0 0 1 1 1 2 4 5 7 第二种解决方案 孩子链表 将每个结点的孩子链在该结点之后组成链表,再将所有头结点组成一个线性表。 typedef struct CTNode { int child; struct CTNode *next; }*ChildPtr; typedef struct{ TElemType data; ChildPtr firstchild; }CTBox; typedef struct{ CTBox nodes[MAX_TREE_SIZE]; int n,r;//结点数和根的位置 }CTree; A B C D E F G 0 A 1 B 2 C ^ 3 D 4 E ^ 5 F ^ 6 G ^ 1 2 3 ^ 4 5 ^ 6 ^ 结点结构 data firstChild nextSibling A B C D E F G 空链域n+1个 树的左子女-右兄弟表示 (二叉链表表示) B C D G F E ? ? ? ? ? ? ? A ? typedef char TreeData; typedef struct node { TreeData data; struct node *firstChild, *nextSibling; } TreeNode; typedef TreeNode * Tree; 用左子女-右兄弟表示实现的树定义 T1 T2 T3 T1 T2 T3 A F H B C D G I J E K A F B C D E G H I K J A B C E D H I K J F G 3 棵树的森林 各棵树的二叉树表示 森林的二叉树表示 森林与二叉树的转换 树的二叉树表示: 树的遍历 深度优先遍历 先根次序遍历 后根次序遍历 A B C D E F G A B C E D G F 深度优先遍历 当树非空时 {访问根结点 依次先根遍历根的各棵 子树} 树先根遍历 ABEFCDG 对应二叉树前序遍历 ABEFCDG 树的先根遍历结果与其对应二叉树 表示的前序遍历结果相同 树的先根遍历可以借助对应二叉树的前序遍历算法实现 A B C E D G F 树的先根次序遍历 A B C D E F G 树的后根次序遍历: 当树非空时 {依次后根遍历根的各棵 子树 访问根结点} 树后根遍历 EFBCGDA 对应二叉树中序遍历 EFBCGDA 树的后根遍历结果与其对应二叉树 表示的中序遍历结果相同 树的后根遍历可以借助对应二叉树的中序遍历算法实现 A B C E D G F A B C D E F G 二叉树的计数 由二叉树的前序序列和中序序列可唯一地确定一棵二叉树。 例, 前序序列 { ABHFDECKG } 和中序序列 { HBDFAEKCG }, 构造二叉树过程如下: HBDF EKCG A EKCG A B H DF KCG EKCG A B H DF EKCG A B H F D E A B H F D E A B H F D C K G 如果前序序列固定不变,给出不同的中序序列,可得到不同的二叉树。 6 1 2 3 4 5 7 8 9 6 1 2 3 7 5 8 4 9 固定前序排列,选择所有可能的中序排列,可以构造多少种不同的二叉树? 例如, 有 3 个数据 { 1, 2, 3 },可得 5 种不同的二叉树。它们的前序排列均为 123,中序序列可能是 321 , 231, 213, 132,123. 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 具有n个结点不同形态的树的数目和具有n-1个结点互不相似的二叉树的数目相同。 有0个, 1个, 2个,
文档评论(0)