二叉树及其应用.pptVIP

  1. 1、本文档共58页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
二叉树及其应用 雅礼 朱全民 二叉树 二叉树是一种特殊的树型结构,它的特点是每个节点至多只有两个子节点。 二叉树每个节点的子树有左右之分,其次序不能任意颠倒。 二叉树也有特殊形式,例如满二叉树、完全二叉树等。 例如右图就是一棵二叉树,并且是一棵完全二叉树。 二叉树的存储结构 常用的存储结构 type bitree=^node node=record data :datatype; lchild,rchild:bitree; end; 二叉树的遍历 遍历( 先序遍历, 中序遍历, 后序遍历) Proc preorder(bt:bitree); if btNil then [ visit(bt^) preorder(bt^.lchild); preorder(bt^.rchild); ] endP 二叉树的性质 在二叉树的第i层上最多有2i-1个结点 深度为K的二叉树最多有2k-1个结点 在二叉树中,叶子结点的总数总比为度数为2的结点多1 有n个结点的完全二叉树的结点按层序编号,则对任意一结点i,有 (1)如果i=1,则结点i是二查树的根,无双亲;如果i1,则双亲是[i/2] (2)如果2in,则结点i无左孩子,否则左孩子为2i (3)如果2i+1n,则结点i无右孩子,否则右孩子为2i+1 树、森林转化为二叉树 用“孩子兄弟表示法”可以将任意一棵树转化为二叉树的形式 森林转化为二叉树 如果F={T1, T2, …,Tm}是森林,则可按如下规则转化为一棵二叉树。 1)若F为空,即m=0,则B为空树 2)若F非空,即m0,则B的根root即为森林中第一棵树的根root(T1),B的左子树为从T1中子树森林F1={T11, T12, …,T1i}转换而成的二叉树;其右子树Rb 是从森林F={T2, …,Tm}中转换出来的二叉树 树的儿子兄弟表示法 在一棵树中,拥有同一个父结点的结点互称为兄弟。我们不妨假设树中每个结点的子结点是有序的(就像二叉树一样),则我们可以将一棵树这样转化成二叉树: 二叉树中每个结点对应原树的每个结点 对于二叉树中的某个结点 它的左子结点对应原树中该结点的第一个子结点; 它的右子结点对应原树中该结点的下一个兄弟。 树的儿子兄弟表示法 这样我们可以类似于二叉树的链式结构写出树的儿子兄弟表示法的存储结构: TYPE tree = ^node; node = record data : datatype; parent, child, brother : tree; // 分别记录父亲、第一个儿子、下一个兄弟 end; 最优二叉树(哈夫曼树) 给定m个实数w1, w2,…, wm,(m=2) ,要求一个具有m个外部节点的扩充二叉树,每个外部ki节点有一个wi与之对应,作为它的权,使得带权外部路径长度 最小,其中li是从根到外部节点的路径长度。 算法 1.构造m个只有1个节点的树 2.找两个最小的权 3.以这两个节点为左右儿子构造一个二叉树,并将该数的根节点权之为左右儿子权值之和 4.继续第二步,直到剩下一棵树为止 讨论 最优k叉树就是指在一个节点最多可以有k个叶子节点的时候,假设有n(n=k)个权值{w1,w2,….wn},试构造出一棵有n个叶子节点的k叉树。每个叶子节点有一个不同的权值wi。其中树的带权路径长度最小的那棵树叫做最优k叉树。 怎么构造?? 分析 最优k叉树必须具备的性质: 每个节点如果不是叶子节点,那么一定有k个儿子节点。 权值大的节点不能在比权值小的节点下方。就是权值大的节点到树根的长度要小于等于权值小的节点到树根的长度。 算法 根据给定的n个权值w1,w2,…,wn构成n棵k叉树的森林F={T1,T2,…,Tn},其中每棵k叉树Ti中都只有一个权值为wi的根结点,其左右子树均空。 在森林F中选出k棵根结点权值最小的树(当这样的树不止k棵树时,可以从中任选k棵),将这k棵树合并成一棵新树,为了保证新树仍是k叉树,需要增加一个新结点作为新树的根,并将所选的k棵树的根分别作为新根的左右孩子,将这k个孩子的权值之和作为新树根的权值。 对新的森林F重复(2),直到森林F中只剩下一棵树为止。这棵树便是最优k叉树。 反例 假设k=3,当n=5时,这样做是对的。但是当n=4时,用刚才的方法得到的“最优3叉树”,但是,明显右图的那颗树会比左图

文档评论(0)

jdy261842 + 关注
实名认证
文档贡献者

分享好文档!

1亿VIP精品文档

相关文档