当前位置: 首页 > news >正文

笔试选择题-树

做过笔试的同学应该知道,数据结构比较常考的除了栈,还有一个数据结构就是树。所以本篇文章就是用来理清树的一些简单的知识点。

  • 树的层次:从根结点开始算,根结点是第一层,以此类推。
  • 结点的度:子树的数量,说白了就是有几个分叉,例如叶子结点度为0
  • 树的度:所有结点中最大的度作为树的度
  • n个结点的树,边数一定是n-1
  • 结点的深度是指根结点到该结点的深度,根结点代表1;结点的高度是指从最底层结点到该结点的深度
  • 树的高度和深度是一样的就是根结点到最底层结点的高度和深度。

二叉树

  • 满二叉树:每一层的结点数量都达到当前层的最大值。深度为k的话,则总结点数为2的k次方减1
    2^0 + 2^1 + 2^2 + 2^3 + ... + 2^(k-1) = 2^k - 1
    
  • 完全二叉树:除了最后一层,每一层的结点数量都达到当前层的最大值。且最后一层要求结点连续。
  • 二叉树第i层(i>0)的最大结点数为2^(i-1),即
  • 二叉树深度为k,有最大结点数为2^k - 1,也就是满二叉树的时候。

例题:10个叶子结点的二叉树,度为2的结点数?
假如n0表示度为0的结点个数,n1表示度为1的结点个数,n2表示度为2的结点个数,则二叉树的总结点数n = n0 + n1 + n2,其中n0就是叶子结点数。存在公式n0 = n2 + 1,所以度为2的结点数为9。公式证明如下:

根据结点边的贡献进行推导
一共有n个结点,则边数为n-1 = n0 + n1 + n2 - 1
n0贡献的边数为0 * n0
n1贡献的边数为1 * n1
n2贡献的边数为2 * n2
则n0 + n1 + n2 - 1 = 0 + n1 + 2 * n2
得证n0 = n2 + 1

例题:深度为k的二叉树,只有度为0和度为2的结点,则该二叉树的结点数至少为2k -1(除了第一层,每层都有两个结点,这样的结点数最少)

例题:已知一棵有 2011 个结点的树,其叶结点个数为 116 ,该树对应的二叉树中无右孩子的结点个数是1896
解析:度为2的结点:n2 = 116 - 1 = 115
结果:度为1的结点(2011 - 115 - 116) + 叶子结点(116),即2011 - 115 = 1896
💡注意度为1的结点是没有右孩子的,具体看树是如何转二叉树的这篇文章

例题:设一棵完全二叉树中有65个结点,则该完全二叉树的深度为7
根据满二叉树性质,6层的话,顶多63个,说明为7层。同理如果是64个结点的完全二叉树的深度也为7。因为完全二叉树并没有什么公式,所以我们需要借助有公式的树,其实满二叉树也是完全二叉树

  • 平衡二叉树:是一颗二叉搜索树,且任意结点的左右子树的高度差不超过

例题:高度为h的平衡二叉树的最少结点数和最大结点数。
情况一:最少结点数满足nh = nh-1 +nh-2 + 1,详见文章
情况二:最大结点数,把树看成满二叉树,这样结点数会达到最大,所以结点数为2h-1

例题:求含有20个结点的平衡二叉树的最大深度为6,求最大深度,说明要每层用的结点越少,深度越高,所以是情况一。如果求最小深度,只需把树看成满二叉树,其中4层的话顶多15个结点,说明最小为5层。

相关文章:

  • 用神经网络模拟3个距离为0的粒子
  • 【重识云原生】第六章容器6.1.10节——DockerFile解析
  • 20220910编译ITX-3588J的Buildroot的系统1(编译uboot)
  • 100 ECMAScript6数组方法
  • 循环神经网络
  • web安全常见漏洞 之CSRF
  • 【面试题 - mysql】进阶篇 - 分库分表
  • 中秋节——嫦娥奔月
  • 文件的上传下载
  • 数学建模学习(101):车辆路线规划问题
  • 为Ubuntu网页设置稳定的数据隧道
  • 通宵三天 我做了一个超级好玩的中秋节小游戏
  • 都这麽大了还不快了解防火墙?
  • 【名词从句】名词从句的虚拟语气、主语从句、引导名词从句
  • SpringBoot中“@SpringBootApplication“自动配置原理《第七课》
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 0x05 Python数据分析,Anaconda八斩刀
  • 10个最佳ES6特性 ES7与ES8的特性
  • Docker下部署自己的LNMP工作环境
  • ERLANG 网工修炼笔记 ---- UDP
  • Hibernate最全面试题
  • iOS编译提示和导航提示
  • python docx文档转html页面
  • React组件设计模式(一)
  • RxJS: 简单入门
  • web标准化(下)
  • XML已死 ?
  • 关于extract.autodesk.io的一些说明
  • 讲清楚之javascript作用域
  • 面试总结JavaScript篇
  • 区块链将重新定义世界
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 网页视频流m3u8/ts视频下载
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 写给高年级小学生看的《Bash 指南》
  • Spring Batch JSON 支持
  • 阿里云API、SDK和CLI应用实践方案
  • #FPGA(基础知识)
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转)ObjectiveC 深浅拷贝学习
  • (转)人的集合论——移山之道
  • ***原理与防范
  • .libPaths()设置包加载目录
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .NetCore项目nginx发布
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • @ModelAttribute注解使用
  • @RestController注解的使用