二叉树的垂直和[关闭]

2023-11-25

如何求二叉树的垂直和。

例如, 考虑下面的二叉树,

                      1
                    /  \
                   /    \
                  /      \
                 2        3
                / \      / \
               /   \    /   \
               4   5    6    7
              / \ / \  / \  / \
             5  9 1  3 6 7 5   5

对于上面的树,垂直总和应计算如下,

  • 1号线:5
  • 2号线:4
  • 3号线:​​2,9,1
  • 4号线:5
  • 5号线:1,3,6
  • 6号线:6
  • 7号线:3、7、5
  • 8号线:7
  • 9号线:5

输出应该是:

5,4,12,5,10,6,15,7,5

首先,您应该找到位置,您可以通过计算到达特定节点的左右花费数量来完成此操作:

                 1     : l = 0, r = 0
                / \
               /   \
      l=1,r=0 2     3  : l = 0, r = 1.
             / \   / \
     ...    4...5 6...7 ....

只需遍历二叉树并最终计算LorR = NumberOfLeft - NumberOfRights对于每个节点,然后将这些数字分组(按它们的LorR值)在一起并找到每个组的总和(从最大正值到最大负值打印它们LorR).

Update:这不适用于高度超过二的树,我们只需对算法进行少量修改即可解决此问题。

我们可以将树视为金字塔,金字塔的每个顶点的长度为1,在每个分支的剩余部分等于最新移动中传递的内容后,我们在高度为3的树中显示这一点:

                  1
                /  \
               /    \
              /      \
             2        3    upto this we used 1/2 size of pyramid
            / \      / \
           /   \    /   \
           4   5    6    7  upto this we used 1/2 + 1/4 part of pyramid
          / \ / \  / \  / \
         5  9 1  3 6 7 5   5  upto this we used 1/2 + 1/4 + 1/4 part of pyramid

这意味着在每一步中,我们都通过其高度来计算左值(事实上,每次乘以 1/2 都会添加到左值,除了上次,它等于 h-1 st 值)。

因此,对于这种情况,我们有:根中的 1 在组 0 中,叶中的 3 在组 -1/2 + 1/4 + 1/4 = 0 中,叶中的 6 在组 1/2 - 1/4 - 中1/4 = 0

叶子中的 1 位于 -1/2 + 1/4 - 1/4 = -1/2 中,依此类推。

For preventing from rounding of 1/(2^x) to zero or other problems we can multiply our factors (1/2, 1/4, 1/8,...) to 2h-1. In fact in the first case I wrote we can say factors are multiplied by 22-1.

Related Pyramid for tree of height 4

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

二叉树的垂直和[关闭] 的相关文章

  • 关于Marching Cubes算法的澄清

    关于Marching Cubes 我对其算法和实现有一些疑问 我已经阅读了 Marching Cubes 的 Paul Bourke 优秀文章以及网站上可用的源代码 但是 我在理解以及如何以自己的方式实现算法方面仍然遇到了一些问题 问题如下
  • 自动跟踪算法

    我正在尝试写一个simple跟踪例程来跟踪电影中的某些点 本质上我有一系列 100 帧长的电影 在黑暗背景上显示一些亮点 我每帧有大约 100 150 个点 它们在电影的过程中移动 我想跟踪它们 所以我正在寻找一些有效的 但可能不会过度实施
  • 分而治之算法找到两个有序元素之间的最大差异

    给定一个整数数组 arr 找出任意两个元素之间的差异 使得较大的元素出现在 arr 中较小的数字之后 Max Difference Max arr x arr y x gt y 例子 如果数组是 2 3 10 6 4 8 1 7 那么返回值
  • 如何为多边形创建内部螺旋?

    对于任何形状 我如何在其内部创建类似形状的螺旋 这与边界 使用 Minkowski 和 类似 尽管它会是相同形状的螺旋 而不是在形状内部创建相同的形状 我找到了这个 http www cis upenn edu cis110 13su le
  • “包含字符串”的快速索引

    在我的应用程序中 我有多达数百万个短字符串 大部分短于 32 个字符 我想实现一个带有附加列表的搜索框 该列表仅包含包含在搜索框中输入的整个字符串的元素 如何预先建立索引来快速找到此类字符串 所有排序的 STL 容器都会检查整个字符串 对于
  • 在树结构的 Big-O 表示法中:为什么有些来源引用 O(logN),有些来源引用 O(h)?

    在研究遍历二叉搜索树的任何算法的复杂性时 我看到两种不同的方式来表达同一件事 版本 1 最坏情况下的遍历算法对树的每个高度进行一次比较 因此复杂度是O h 版本 2 最坏情况下的遍历算法对树的每个高度进行一次比较 因此复杂度是O logN
  • 优化计算中使用的 # 个线程的算法

    我正在执行一个操作 我们将其称为CalculateSomeData CalculateSomeData 在连续的 代 中运行 编号为 1 x 整个运行中的代数由CalculateSomeData 的输入参数固定 并且是先验已知的 完成一次生
  • 颜色逻辑算法

    我们正在构建一个体育应用程序 并希望将团队颜色融入到应用程序的各个部分 现在 每个团队都可以使用几种不同的颜色来表示 我想做的是执行检查以验证两个团队颜色是否在彼此一定的范围内 这样我就不会显示两个相似的颜色 因此 如果团队 1 的主要团队
  • 在一个区域中拟合二维多边形的算法?

    这有标准吗 算法名称 说 我有 10 个不同大小的多边形 我有一个特定大小的区域 我想知道如何填充该区域中的最多多边形 以及它们是如何拟合的 笔记 多边形可以根据限制集进行旋转 一个可能的名称是包装问题 http en wikipedia
  • 为什么 Dijkstra 算法使用减密钥?

    Dijkstra 教给我的算法如下 while pqueue is not empty distance node pqueue delete min if node has been visited continue else mark
  • 连接红黑树

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

    我有一个字符串数组 ted williams golden voice radio 我希望这些关键字的所有可能组合采用以下形式 ted williams golden voice radio ted williams ted golden
  • 查找字符串中最常见的子字符串的算法

    是否有任何算法可用于查找字符串中最常见的短语 或子字符串 例如 以下字符串将 hello world 作为其最常见的两个单词短语 hello world this is hello world hello world repeats thr
  • 密文窃取算法 - 哪一种是正确的?

    网络上提出了两种算法 在这两种算法中 第一部分是相同的 1 Pad the last partial plaintext block with 0 2 Encrypt the whole padded plaintext using the
  • 添加边后更新最大流量

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

    我首先要说的是以下问题不是为了家庭作业目的即使因为我几个月前就完成了软件工程师的工作 无论如何 今天我正在工作 一位朋友向我询问了这个奇怪的排序问题 我有一个包含 1000 行的列表 每行代表一个数字 我想创建 10 个子列表 每个子列表都
  • 寻找公共子集的算法

    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
  • 高度并行化的Levenshtein距离算法

    实际上 我必须实现一个字符串比较 最后得到匹配百分比 不仅仅是布尔结果匹配 不匹配 为此 我找到了 Levenstein 距离算法 但现在的问题是性能 例如 我有 1k 个字符串需要相互比较 现在大约需要 10 分钟 对于每个算法 我已经并
  • 如何实现n个元素的查找和插入操作的动态二分查找

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

    我有一个包含数值的项目列表 我需要使用这些项目求和 我需要你的帮助来构建这样的算法 下面是一个用 C 编写的示例 描述了我的问题 int sum 21 List

随机推荐

  • 文本框不会拉伸以填充视图框

    我希望 LOB 表单中的标签和文本框的字体大小随着窗口大小或分辨率的变化而增大和缩小 为了实现这一点 我将标签和文本框放置在视图框中 标签和自定义单选按钮的行为符合我的预期 但文本框不会水平拉伸以填充视图框 抱歉 由于代表而无法发布图像 如
  • Java8 - 如何知道夏令时现在是否开启

    我需要使用新的 Java 8 日期时间类来了解夏令时是否已启用 我找到了一个如何在 jodatime 中执行此操作的条目 jodatime 如何知道夏令时是否开启 但在 Java 8 中如何找到它呢 jodatime应该有点类似 但我找不到
  • 复制数据帧的观察结果,同时替换 R 中的特定变量值

    我正在寻找一些有关数据重组的建议 我正在使用 Google Forms 收集一些数据 我将其下载为 csv 文件 如下所示 alpha beta option 6 8 9 10 11 apple 9 6 pear 1 6 apple 3 8
  • sql仅按顺序的行进行分组

    假设我有下表 MyTable 1 A 2 A 3 A 4 B 5 B 6 B 7 A 8 A 我需要 sql 查询来输出以下内容 3 A 3 B 2 A 基本上我正在做一个group by但仅适用于序列中在一起的行 有任何想法吗 请注意 数
  • C++ 中的点 (.) 运算符和 -> 有什么区别? [复制]

    这个问题在这里已经有答案了 C 中的点 运算符和 gt 有什么区别 foo gt bar 是相同的 foo bar 由于结合强度 上面的括号是必要的 and 运营商 foo bar 不起作用 因为点 运算符首先被评估 参见运算符优先级 点
  • WordPress 管理员:将自定义帖子类型作为父菜单的子菜单时,父菜单链接将被 CPT 覆盖

    我注册了一个自定义帖子类型 并且我不希望它有自己的菜单 而是想将其放置为名为的现有管理菜单项的子菜单my custom parent page 这是我的代码 register post type my custom post type ar
  • C# - 两个日期之间的差异?

    我正在尝试计算两个日期之间的差异 这是我目前正在使用的 int currentyear DateTime Now Year DateTime now DateTime Now DateTime then new DateTime curre
  • CSS“display: table-column”应该如何工作?

    鉴于以下 HTML 和 CSS 我在浏览器中完全看不到任何内容 撰写本文时最新的是 Chrome 和 IE 一切都崩溃到 0x0 px 为什么
  • R Studio 无法正确处理中文字符

    我在 R Studio 中处理中文字符时似乎遇到问题 简单的代码如下 data lt c 物品 方案 data 1 347 211 251 345 223 201 346 226 271 346 241 210 即使我跑步它也保持不变 Sy
  • 在静态库之外抛出 C++ 异常?

    通常 异常不得传播模块边界 例如 Herb Sutters C 编码标准 第 62 项 中所解释的那样 当使用不同的编译器或仅编译器设置进行编译时 这可能会崩溃 我可以理解这个问题 例如的动态链接库 但我想知道它是否也适用于静态库 静态库是
  • 从 Active Storage 中删除所有数据?

    我想知道如何删除 Active Storage 中的所有数据甚至重置 Active Storage 有什么办法可以做到这一点吗 先感谢您 注意 我使用的是 Rails 5 2 这个问题对我提出了挑战 所以我用本地存储对我的虚拟应用程序进行了
  • 如何检查应用程序是否在flutter中最小化到后台?

    是否有一个 API 可以检查应用程序是否已最小化但尚未被杀死 因此它处于后台 我用谷歌搜索了它 也在 GitHub issues 中搜索了它 但找不到一个 这样的API存在吗 你可以加WidgetsBindingObserver混入一个或多
  • 在 Java 中实现接口时降低可见性

    我想设计类 A 实现接口 C 并降低方法 在 C 中声明 的可见性 以使其免受外部世界的影响 将类 A 中实现的接口中的方法之一设为私有 降低类 A 中的可见性 出于安全原因我必须这样做 我该怎么做 有解决方法吗 我们确实知道 默认情况下
  • 如何可靠地将 Virtual TreeView 滚动到底部?

    具有自定义节点高度的 TVirtualStringTree 对象 如何可靠地将 Virtual TreeView 滚动到底部 即滚动条到达底部 我尝试打电话tree1 FullExpand then tree1 ScrollIntoView
  • 如何将带有单元格分隔符的Python脚本转换为jupyter笔记本? [复制]

    这个问题在这里已经有答案了 我主要使用 Spyder 进行数据分析 并且对它非常满意 您可以在普通的 python 脚本中使用 Jupyter Notebooks 的单元功能 分隔各个代码单元 以及执行块 同样的事情也可能发生在 Atom
  • jQuery(几乎)相当于 PHP 的 strip_tags()

    这个函数有 jQuery 版本吗 string 条带标签 字符串 str 字符串 allowable tags 从字符串中删除所有标签及其内部内容 除了允许的标签字符串中定义的标签和内容 like var stripped strip ta
  • Powershell - 使用参数启动 Windows 服务

    我需要通过 Powershell 以 1 作为参数启动 Windows 服务 如下所示 所以基本上我想用 powershell 做这样的事情 Start Service MyService 1 lt won t work 谷歌搜索对此没有任
  • 如何知道照片是横向还是纵向模式?

    我从 iPhone iPad 库中加载照片 大部分都是纵向模式 我想知道如何查看横向或纵向模式下的照片 Use the imageOrientation的财产UIImage实例 它会返回给你其中之一these常数 例子 UIImage im
  • 如何仅获取特定行的列平均值?

    我需要获取特定行 此处 年份 的一列 此处 分数 的平均值 具体来说 我想知道三个时期的平均分数 第 1 期 年份 周期 2 年份 gt 1984 年 年份 期间 3 年份 gt 1991 这是我的数据的结构 country year sc
  • 二叉树的垂直和[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 如何求二叉树的垂直和 例如 考虑下面的二叉树 1 2 3 4 5 6 7