二叉树概念,存储结构、遍历.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
二叉树概念,存储结构、遍历

void preorder(struct bnode *root ) { if ( root == NULL ) return; else { visite ( root ); preorder ( root-LC ); preorder ( root-RC ); } } postorder ( root-LC ); postorder ( root-RC ); visite ( root ); 后序 inorder ( root-LC ); visite ( root ); inorder ( root-RC ); 中序 先序 三种遍历算法的比较:中 左 右 课堂练习:写出下面这棵树的三种遍历序列 先序:A B D G H E C F I K J 中序:G D H B E A C K I F J 后序:G H D E B K I J F C A A B C D E G H K F I J 2 二叉树结构 Binary Tree 对二叉树的许多操作算法简单 任何树可以与二叉树相互转换 解决了树的存储结构及其运算中存在的复杂性 二叉树的基本概念: 二叉树的每个结点至多只有二棵子树(不存在度大于2的结点); 子树有左右之分,次序不能任意颠倒。 也是一个递归定义 二叉树不是树的特殊情况: 二叉树可以是空集合 根可以有空的左子树或空的右子树 二叉树结点的子树要区分左子树和右子树 这是二叉树与树的最主要的差别。 二叉树的五种基本形态: (a)空二叉 (b)只有根 (c) 有左子树 (d)有右子树 (e) 特殊形态的二叉树: 所有分支结点都存在左、右子树,且所有叶子结点都在同一层上。 1满二叉树: 满二叉树的示意图: A E F C B H G D I J K L M N O 深度为k有2k-1个结点 2完全二叉树: 叶子结点只可能在层次最大的两层上出现 对任一结点,若其右分支下的结点的最大层次为1,则其左分支下的结点的最大层次不小于1。 对结点进行顺序编号(从上到下,从左到右): 深度为k、有n个结点的二叉树中所有结点与深度为k的顺序编号的满二叉树从1到n标号的结点相对应 完全二叉树 完全二叉树的示意图: A E F C B H G D I J K L 非完全二叉树的示意图: A E F C B H G D I J K L 3 二叉排序树: 空二叉树 或者: 左子树上所有结点的关键字均小于根结点的关键字;右子树上所有结点的关键字均大于等于根结点的关键字。 左子树和右子树本身又各是一棵二叉排序树。 二叉排序树的示意图: 8 4 9 10 4 17 1 6 12 二叉树的存储结构 顺序存储 所有节点存储到 连续单元(数组) A B C E D H F G I 0 1 2 … … MAX-1 问题的关键: 二叉树中的节点按怎样的次序编号,来反映节点之间的逻辑关系 顺序存储二叉树 在满(完全)二叉树中 按从上到下,从左到右的顺序 对所有节点由1开始编号 再根据编号存入相应的下标中 若已知某节点的编号为n 其左子节点编号为2n 右子节点编号为2n+1 父节点为[n/2](取整) A E F C B D G 1 3 2 6 4 7 5 0 1 2 3 A B C D E F G 4 5 6 7 满二叉树和完全二叉树中结点的序号可以唯一地反应出结点之间的逻辑关系。 对于一般二叉树,将其每个节点编号与满二叉树对应进行存储 这种存储方式,可能会造成大量内存空间的浪费 A B C D E 1 3 2 4 5 6 7 8 9 10 11 A B C D E 0 1 2 3 4 5 6 7 8 9 10 11 若经常需要插入与删除树中结点时,顺序存储方式不是很好. 链式存储二叉树 data LChild RChild 二叉链表 二叉树的一个节点结构: 通过指针“指向”左右子树 左指针域,指向结点的左子树根 右指针域,指向结点的右子树根 struct bnode { elemtype data; struct bnode *LC, *RC; }; data LC RC 节点结构的C语言描述 A B C E D G F 用二叉链表结构表示下面的树 A L R B L R C L R D L R E L R F L R G L

文档评论(0)

153****9595 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档