数据结构二叉树习题含答案要点.docVIP

  1. 1、本文档共10页,可阅读全部内容。
  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文档。上传文档
查看更多
2.1 创建一颗二叉树 创建一颗二叉树,可以创建先序二叉树,中序二叉树,后序二叉树。我们在创建的时候为了方便,不妨用‘#’表示空节点,这时如果先序序列是:6 4 2 3 # # # # 5 1 # # 7 # #,那么创建的二叉树如下: 下面是创建二叉树的完整代码:穿件一颗二叉树,返回二叉树的根 2.2 二叉树的遍历 二叉树的遍历分为:先序遍历,中序遍历和后序遍历,这三种遍历的写法是很相似的,利用递归程序完成也是灰常简单的: 2.3 层次遍历 层次遍历也是二叉树遍历的一种方式,二叉树的层次遍历更像是一种广度优先搜索(BFS)。因此二叉树的层次遍历利用队列来完成是最好不过啦,当然不是说利用别的数据结构不能完成。 2.4 求二叉树中叶子节点的个数 树中的叶子节点的个数 = 左子树中叶子节点的个数 + 右子树中叶子节点的个数。利用递归代码也是相当的简单, 2.5 求二叉树的高度 求二叉树的高度也是非常简单,不用多说:树的高度 = max(左子树的高度,右子树的高度) + 1 2.6 交换二叉树的左右儿子 交换二叉树的左右儿子,可以先交换根节点的左右儿子节点,然后递归以左右儿子节点为根节点继续进行交换。树中的操作有先天的递归性。。 2.7 判断一个节点是否在一颗子树中 可以和当前根节点相等,也可以在左子树或者右子树中。? 2.8 求两个节点的最近公共祖先 求两个节点的公共祖先可以用到上面的:判断一个节点是否在一颗子树中。(1)如果两个节点同时在根节点的右子树中,则最近公共祖先一定在根节点的右子树中。(2)如果两个节点同时在根节点的左子树中,则最近公共祖先一定在根节点的左子树中。(3)如果两个节点一个在根节点的右子树中,一个在根节点的左子树中,则最近公共祖先一定是根节点。当然,要注意的是:可能一个节点pNode1在以另一个节点pNode2为根的子树中,这时pNode2就是这两个节点的最近公共祖先了。显然这也是一个递归的过程啦: 可以看到这种做法,进行了大量的重复搜素,其实有另外一种做法,那就是存储找到这两个节点的过程中经过的所有节点到两个容器中,然后遍历这两个容器,第一个不同的节点的父节点就是我们要找的节点啦。?实际上这还是采用了空间换时间的方法。 2.9 从根节点开始找到所有路径,使得路径上的节点值和为某一数值(路径不一定以叶子节点结束) 这道题要找到所有的路径,显然是用深度优先搜索(DFS)啦。但是我们发现DFS所用的栈和输出路径所用的栈应该不是一个栈,栈中的数据是相反的。看看代码:注意使用的两个栈。结点的度: 结点下面关联几个节点 就是结点的度 树的度: 结点度最高的度为树的度 叶子结点: 结点下面没子结点 度为0的结点 分支标点: 不是叶子结点的结点 内部结点:不是最顶层也是不是最底层的结点 父结点, 兄弟结点, 子结点都是相对的. 层次: 顶层为0层(有些定为1层)下面依次加一层 树的结点总数(n)=总度数(k)+1 ? ? ? ? ? ? 1 ? ? ? / ? ?| ? ?\ ? ? 2 ? ? ? 3 ? ? ?4 ?/ | \ ? ? ? ? ? ?\ ?5 ?6 ?7 ? ? ? ? ? ? ?8 ? ? ? ? ? ? ? ? ? ? / \ ? ? ? ? ? ? ? ? ? ?9 ? ?10 树的遍历: 前序遍历: 根-最左子结点-再最左边(先访问根, 再访问子结点, 子结点, 可以看作一个子树) 后序遍历: 先子节点, 再根节点 层次遍历: 是分层一个一个来. 前: 1, 2, 5, 6, 7, 3, 4, 8, 9, 10 后: 5, 6, 7, 2, 3, 9, 10, 8, 4, 1 层: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 二叉树: 二叉树最多只能有两个结点. 二叉树分左子右子, 一般树不分. 满二叉树: 每个节点都是两个节点 完全二叉树: 如果一个二叉树有n层, n-1层是满树, 最后一层要从左到右排列. 特性: 1.二叉树第i层, 最多只能有2^(i-1)个结点(i=1) 2.深度为k的二叉树最多有2^k-1个结点(k=1) 3.对任何一棵二叉树, 如果其叶子结点数为n0, 度为2的结点数为n2, 则n0 = n2 + 1 4.如果一个完全二叉树的结点按层次编号. 1)如果i=1,则结点i无父结点, 是二叉树的根; 如果i 1, 则父结点是 i/2 向下取整 ; 2)如果2i n, 则结点i为叶子结点, 无左子结点; 否则, 其左子结点是结点2i; 3)如2i + 1 n, 则结点i无右子叶点, 否则, 其右子结点是结点2i+1. 二叉树多一个中序遍历:先左再根再右 树与二叉树转换:一棵树转成等价的二叉树 任意结点的孩子结点转成二叉树的左子树结点, 兄弟结点转为

文档评论(0)

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

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

1亿VIP精品文档

相关文档