如何判断一棵二叉树是否完整?

2023-11-21

完全二叉树被定义为其中每个级别(可能除了最深的级别)都被完全填充的二叉树。在最深层,所有节点必须尽可能位于左侧。

我认为一个简单的递归算法将能够判断给定的二叉树是否完整,但我似乎无法弄清楚。


如同:

height(t) = if (t==NULL) then 0 else 1+max(height(t.left),height(t.right))

你有:

perfect(t) = if (t==NULL) then 0 else { 
                  let h=perfect(t.left)
                  if (h != -1 && h==perfect(t.right)) then 1+h else -1
             }

如果叶子节点的深度不同,或者任一节点只有一个子节点,则 Perfect(t) 返回 -1;否则,它返回高度。

编辑:这是“完整”=“完美二叉树是一个完整的二叉树,其中所有叶子都处于相同的深度或相同的级别。1(这也被含糊地称为完全二叉树。)”(维基百科).

这是一个递归检查:“完整二叉树是这样的二叉树,其中每个级别(可能除了最后一个级别)都被完全填充,并且所有节点都尽可能远离左侧。”。如果树不完整,则返回 (-1,false),否则返回 (height,full),如果是完美的,则 full==true 。

complete(t) = if (t==NULL) then (0,true) else { 
                  let (hl,fl)=complete(t.left)
                  let (hr,fr)=complete(t.right)                      
                  if (fl && hl==hr) then (1+h,fr)
                  else if (fr && hl==hr+1) then (1+h,false)
                  else (-1,false)
              }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何判断一棵二叉树是否完整? 的相关文章

  • 简单的排名算法

    我需要创建一个民意调查 按照项目的好坏顺序创建一个排名列表 我打算向每个用户展示两个项目 让他们选择一个他们认为更好的项目 然后多次重复这个过程 它有点类似于您在社交网络电影 我应该如何根据收到的答案对项目进行排名 看着那 这ELO国际象棋
  • 定点数学比浮点运算快吗?

    多年前 即 20 世纪 90 年代初期 我构建了图形软件包 该软件包基于定点算术和预先计算的 cos sin 表格以及使用牛顿近似方法进行 sqrt 和对数近似的缩放方程来优化计算 这些先进技术似乎已经成为图形和内置数学处理器的一部分 大约
  • 数独算法,暴力破解[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在尝试
  • 这个函数(for循环)空间复杂度是O(1)还是O(n)?

    public void check 10 for string i list Integer a hashtable get i if a gt 10 hashtable remove i 这是 O 1 还是 O n 我猜测 O n 但不是
  • 我应该对算法使用递归还是记忆化?

    如果我可以选择使用递归或记忆来解决问题 我应该使用哪一个 换句话说 如果它们都是可行的解决方案 因为它们提供了正确的输出并且可以在我正在使用的代码中合理地表达 那么我什么时候会使用其中一个而不是另一个 它们并不相互排斥 您可以同时使用它们
  • 如何计算 3D Morton 数(交织 3 个整数的位)

    我正在寻找一种快速计算 3D Morton 数的方法 这个网站 http www graphics stanford edu seander bithacks html InterleaveBMN有一个基于幻数的技巧来处理 2D Morto
  • 连接红黑树

    OCaml 标准库有一个很棒的Set使用非常有效的分而治之算法来计算的实现union两套 我相信它会从一组中获取整个子树 而不仅仅是单个元素 并将它们插入到另一组中 并在必要时重新平衡 我想知道这是否需要 OCaml 使用的 AVL 树中保
  • String.contains() 的时间复杂度

    String contains 的时间复杂度是多少 假设 n 是与另一个长度为 k 的字符串进行比较的字符串的长度 如果不知道您感兴趣的 String contains 的实际实现 就没有答案 或者你打算使用什么算法 一个完全幼稚的实现可能
  • 计算序列而无法存储值?

    问题陈述 here http www spoj com problems EC SER 令 S 为无限整数序列 S0 a S1 b Si Si 2 Si 1 对于所有 i gt 2 你有两个整数 a 和 b 您必须回答有关序列中第 n 个元
  • 查找字符串中最常见的子字符串的算法

    是否有任何算法可用于查找字符串中最常见的短语 或子字符串 例如 以下字符串将 hello world 作为其最常见的两个单词短语 hello world this is hello world hello world repeats thr
  • 大 ר 符号到底代表什么?

    我真的很困惑大 O 大 Omega 和大 Theta 表示法之间的区别 我知道大 O 是上限 大 Omega 是下限 但是大 theta 到底代表什么 我读过这意味着紧束缚 但是 这是什么意思 首先我们来了解一下什么是大O 大Theta和大
  • 在 Python 中从 Excel 复制 YEARFRAC() 函数

    因此 我使用 python 来自动执行一些必须在 Excel 中执行的重复任务 我需要做的计算之一需要使用yearfrac 这在Python中被复制了吗 I found this https lists oasis open org arc
  • 添加边后更新最大流量

    考虑我们有一个网络流量 并使用 Edmond Karp 算法 我们已经拥有网络上的最大流量 现在 如果我们向网络添加任意边 具有一定容量 更新最大流量的最佳方法是什么 我正在考虑更新关于新边缘的残差网络 并再次寻找增强路径 直到找到新的最大
  • 寻找公共子集的算法

    I have N number of sets Si of Numbers each of a different size Let m1 m2 mn be the sizes of respective sets mi Si and M
  • 如何以最低的价格优化购物车?

    我有一个我想买的物品清单 这些商品由不同的商店提供 价格也不同 商店有单独的送货费用 我正在寻找一种最佳的购物策略 以及支持它的java库 以最低的总价购买所有商品 Example 商品 1 在 Shop1 的售价为 100 美元 在 Sh
  • 使用递归返回嵌套列表中第二小的数字

    我必须归还第二小的使用递归的 python 列表中的数字 以及no loops 我所做的是创建一个辅助函数 它返回列表中 最小 第二小的 值的元组 然后我只取tuple 1 in my second smallest func def s
  • 如何实现n个元素的查找和插入操作的动态二分查找

    这个想法是使用多个数组 每个长度为 2 k 根据 n 的二进制表示来存储 n 个元素 每个数组都是排序的 不同的数组没有以任何方式排序 在上述数据结构中 SEARCH是通过对每个数组进行一系列二分查找来进行的 INSERT 是通过一系列相同
  • Java中的对象池模式

    所以我实现了自己的对象池模式 它工作得很好并且符合预期 从列表中返回我的 老师 对象 并在没有对象时创建它们 我的问题 返回的对象 Teacher 然后需要被转换为它的专门子类之一 例如 生物老师 获得这种功能的最佳方法是什么 编辑 抱歉
  • 关于复杂性(如果使用基于比较的排序算法)

    众所周知 任何基于比较模型的排序算法都有nlogn的下界 即Omega nlogn 这可以用数学证明 但众所周知 荷兰国旗问题可以在 O n 时间内对 3 个不同的元素 重复使用 进行排序 它也是基于比较模型 但可以在 O n 时间内进行排
  • 最小硬币找零问题——回溯

    我正在尝试用最少数量的硬币解决硬币找零问题 采用回溯法 我实际上已经完成了它 但我想添加一些选项 按其单位打印硬币数量 而不仅仅是总数 这是我下面的Python代码 def minimum coins coin list change mi

随机推荐

  • 如何在 mayavi2 中缩放 x 轴和 y 轴?

    我想使用 mayavi mlab surf 用 mayavi2 绘制 3 d 绘图 该函数有一个名为 warp scale 的参数 可用于缩放 z 轴 我正在寻找类似的东西 但适用于 x 和 y 轴 我可以通过将 x 和 y 数组相乘 然后
  • python 中数组的导数?

    目前我有两个 numpy 数组 x and y大小相同 我想编写一个函数 可能调用 numpy scipy 函数 如果存在的话 def derivative x y n 1 something return result where res
  • m 的静态声明位于非静态声明之后

    我正在尝试一个小例子来了解静态外部变量及其用途 静态变量是局部范围的 外部变量是全局范围的 静态5 c include
  • 如何在 Chrome 扩展浏览器操作中显示 Google reCAPTCHA v2?

    我正在构建一个 Chrome 扩展程序 它与我希望使用 Google recatcha 保护的 API 进行交互 因为我打算让它在 Chrome 扩展程序之外使用 API 端正在工作 正确验证了 Google 的 recapcha 响应 但
  • SerialVersionUID 是如何计算的

    当我在 Eclipse 中创建 Java 类时 它实现了Serializable界面 我收到警告 可序列化类 ABCD 未声明静态final long 类型的serialVersionUID 字段 因此 当我单击警告时 我会在 Eclips
  • 从具有自定义字段的表单创建 mailto

    我有一个包含 3 个字段 姓名 电子邮件和消息 的 HTML 表单 我想使用这 3 个字段创建自定义 mailto 但我不想创建如下所示的固定内容 a href Send a mail a 这可能吗 如果不是 我是否有其他方法来制作简单的处
  • 使用 npm 安装 bcrypt 时出错

    我无法安装bcrypt using npm在我的机器上 因为我遇到以下错误 我一直在解决这个问题 但运气不佳 您能否建议任何步骤来诊断或解决问题 以便我可以运行npm install bcrypt成功地 Someones Macbook n
  • 如何以编程方式(合法地)获取街道地址的经度和纬度

    据说 可以从谷歌地图或某些此类服务中获取此信息 仅美国地址是不够的 您正在寻找的术语是地理编码 是的 谷歌确实提供了这项服务 新的V3 API http code google com apis maps documentation geo
  • 如何追踪这个? AttributeError:“NoneType”对象在 makemigrations 期间没有属性“is_relation”

    自昨天以来我第二次遇到令人困惑的错误 上次我只是扁平化了整个迁移 但我从未真正找到导致问题的原因 所以当我尝试为我的 python 项目进行迁移时就会出现这种情况 我应该在哪里寻找错误 我觉得这实际上与迁移无关 而是与views py或mo
  • “核心语言”是什么意思?

    在表中关于这一页从 GCC 文档来看 其中一项 大约在表格的中间 仅被列为 核心语言 这意味着什么 语言的哪些部分不会被包括在内 标准库是该语言的一部分 为了表达仅与语法规则 语义规则等相关但与库无关的语言子集 人们使用术语核心语言 例如
  • 如何从 Android 手机获取时区?

    我想在单击按钮时从 Android 手机获取时区 您是否尝试过使用TimeZone getDefault 大多数应用程序都会使用时区 getDefault 它返回一个基于时区的 程序运行所在的时区 Ref http developer an
  • Django仅在生产环境中使用私有S3存储

    我已将 django REST API 设置为在调试模式下使用本地存储 在生产环境中使用 S3 存储 这对于公共文件很有效 因为我覆盖了DEFAULT FILE STORAGE像这样 if IS DEBUG DEFAULT FILE STO
  • 接受多个 Id 值的 T-SQL 存储过程

    有没有一种优雅的方法来处理将 id 列表作为参数传递给存储过程 例如 我希望我的存储过程返回部门 1 2 5 7 20 过去 我传递了一个逗号分隔的 id 列表 如下面的代码 但感觉这样做真的很脏 我认为 SQL Server 2005 是
  • .NET 中的 C# 类何时调用析构函数?

    比如说 我有自己的 C 类 定义如下 public class MyClass public MyClass Do the work MyClass Destructor 然后我从 ASP NET 项目创建类的实例 如下所示 if true
  • Google Chrome .dev 无法通过 http 工作 [重复]

    这个问题在这里已经有答案了 自上次更新以来谷歌浏览器 63 0 3239 84 the dev我的本地开发计算机的域不再工作 因为浏览器强制 URL 通过 https 并且我的本地计算机上没有 sicure 证书 有没有办法让它与 dev
  • 64 位 iOS 设备上的 asm("trap")

    在我自己开发的断言宏中 我一直在 iOS 设备上使用 asm trap 或在 iOS 模拟器上使用 asm int3 来中断调试器 然而 在设备的 64 位版本中 我得到了陷阱指令的 无法识别的指令助记符 有与arm64相当的吗 像 bui
  • 使用 feed_dict 比使用数据集 API 快 5 倍以上?

    我创建了一个 TFRecord 格式的数据集进行测试 每个条目包含 200 列 名为C1 C199 每个都是一个字符串列表 和一个label列来表示标签 创建数据的代码可以在这里找到 https github com codescv tf
  • Pyplot 交互式缩放

    我想显示首次显示时放大的图像 但仍然可以使用图窗工具栏中的交互式 重置原始视图 按钮缩小到全尺寸 裁剪是完全不可接受的 使用plt axis x0 x1 y0 y1 确实允许平移 但交互式窗口不会重置为全尺寸 有没有办法触发情节缩放或以其他
  • AWS Lambda HTTP API 网关集成上不可能实现 CORS

    创建了返回 3 个 HTTP 标头的 AWS Lambda 函数 NodeJS aaa Access Control Allow Origin 和 bbb exports handler async event gt const respo
  • 如何判断一棵二叉树是否完整?

    完全二叉树被定义为其中每个级别 可能除了最深的级别 都被完全填充的二叉树 在最深层 所有节点必须尽可能位于左侧 我认为一个简单的递归算法将能够判断给定的二叉树是否完整 但我似乎无法弄清楚 如同 height t if t NULL then