计算二叉树的单个垂直行中的节点之和

2023-12-30

对于二叉树,我想获得落在单个垂直线上的所有节点的总和。我想要每个垂直节点中的节点总和

             A
           /    \
          B      C
         /  \   /  \
         D   E  F   G
        / \ 
        H  I

如果你看上面的 T 恤

line 0   A  E F   so sum  = A+E+F
line -1  B I      so sum = B +I
line 1   C        so sum = C
line 2   G        so sum = G

我实现了以下算法

Map<Integer,Integere> mp = new HashMap<Integer,Integer>()
calculate(root,0); 

 void calculate(Node node, int pos){
   if(node==null)
        return ;
  if(mp.containsKey(pos) ){
    int val = mp.get(pos) + node.data;
     mp.put(pos,val);
    }
    else{ 
         mp.put(pos,node.data);
    }

    calculate(node.left,pos-1);
    calculate(node.right,pos+1);

}
  1. 我认为上面的算法很好。可以 有人确认吗?
  2. 另外我怎样才能在不使用的情况下做到这一点 HashMap、arraylist 或任何此类 java.One 的集合数据类型 方法二是 2 个数组,其中一个用于 存储负索引(映射到 积极)和一个积极的 索引(根的右侧)。但是我们 不知道数组的大小是多少 将。
  3. 一种方法是使用双链接 列表并在右/左添加节点 如有必要,请移动。不是 得到我该如何实现这个 方法?任何其他简单/更多时间 有效的方法?
  4. 上面代码的复杂度是 我的时间复杂度是 O(n)? (我不擅长 分析时间复杂度,所以 问)

C++ code

int vertsum(Node* n, int cur_level, int target_level)
{
  if (!n)
    return 0;

  int sum = 0;
  if (cur_level == target_level)
    sum = n->value;
  return sum + 
         vertsum(n->left, cur_level-1, target_level) + 
         vertsum(n->right, cur_level+1, target_level);
}

调用示例:

vertsum(root, 0, 1);

EDIT:

澄清需求后,这里是建议的代码。请注意,这是 C++ 风格的,并不完全使用 Java 或 C++ 的列表标准 API,但您应该明白这个想法。我假设addNodeBefore and addNodeAfter初始化节点的数据(即ListNode::counter)

void vertsum(TreeNode* n, int level, ListNode& counter)
{
  if (!n)
    return;

  counter.value += n->value;
  counter.index = level;

  if (! counter.prev)
    addNodeBefore(counter);
  vertsum(n->left, level-1, counter.prev);             

  if (! counter.next)
    addNodeAfter(counter);
  vertsum(n->right, level+1, counter.next);

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

计算二叉树的单个垂直行中的节点之和 的相关文章

  • 当托管在 WinForms 容器中时,WPF ScrollViewer 不会接收鼠标事件

    我们有一个 WinForms 应用程序 我们正在逐步将其转换为 WPF 此时 应用程序的主窗体是一个 Form WinForms 其中包含 WPF 中内置的垂直侧边栏 侧边栏托管在 ElementHost 控件中 侧边栏由包含其他控件的 S
  • Sql查询性能慢

    我正在编写一个 SQL 查询 这给我带来了缓慢的性能 因此 它给我带来了 504 网关超时问题 请帮助我重新创建此查询 以便我的输出结果更快 我将把查询放在下面 select r c1 parent item c2 parent item
  • 类型“NSNotification.Name”没有成员“UITextField”

    在 Swift 4 2 中 出现以下错误 在 Swift 4 中工作正常 类型 NSNotification Name 没有成员 UITextField 这是我的错误代码 NotificationCenter default addObse
  • 以引用对象为标准的 mongoid 作用域

    我在 Rails 3 中的 Mongoid 模型有以下范围 class Expert include Mongoid Document referenced in category scope currently available lam
  • 在不违反 REST 的情况下处理长查询

    我们有一个 REST api 并且我们在坚持 REST 精神方面做得非常好 然而 我们有一个重要的消费者 他们请求一种方法来协调他们的数据存储 流程如下 消费者进行 GET 调用来检索在某个日期范围内创建的所有库存对象 假设这会返回 100
  • Antlr 数组帮助

    嘿 我开始在 java 中使用 Antlr 我想知道如何将一些值直接存储到二维数组中并返回该数组 我根本找不到任何关于此的教程 感谢所有帮助 假设您想要解析一个包含由空格分隔的数字的平面文本文件 您想将其解析为二维数组int其中每一行都是数
  • 为什么动态构造对于 php 编译器 (PHP) 来说很困难?

    我正在读保罗 比格的书http blog paulbiggar com archive a rant about php compilers in general and hiphop in pspecial http blog paulb
  • 无法使用集成在 P4 中创建新分支

    我在 P4 有一个分行 depot MyDemoInfo trunk Server My Service 在 My Service 下 存在我的整个源代码 现在 当我尝试从上面的主干分支创建一个新分支时 它给了我错误 我正在尝试创建一个新的
  • ggplot geom_tile 与面的间距

    我正在尝试制作一个按 x 轴上的两个离散变量排序的多面 ggplot 问题是我想让垂直相邻的条目全部接触 目前 行之间存在空间 具体取决于顶部图与底部图中因子的水平 抱歉 这个可重现的示例有点冗长 npats 20 simsympt c i
  • 如何将反应式rhandsontable重置为默认值?

    我正在构建一个应用程序 其中 2 2 表包含一些用于进一步计算的值 这些值可以由用户更新 并且用户将能够恢复到原始值 我试图通过一个操作按钮来实现它 该按钮会将表重置为其原始值 但表不会更新 这是一个简化的示例 rm list ls lib
  • HTML 电子邮件中的内联边框样式

    我正在处理响应式 HTML 电子邮件 并且仅在 IE 中的 Gmail 中遇到渲染问题 必须如此 它在其他 27 个客户端变体中运行良好 我们需要支持 我在这里设置了一个小提琴 http jsfiddle net 39gzj http js

随机推荐

  • 搭载 iOS 5 和 iOS 6 的 Facebook

    我即将发布一个应用程序 它必须同时支持 iOS 5 和 iOS 6 但是对于新的 Facebook SDK 3 1 我不太确定如何集成 Facebook 功能以与两个 iOS 版本一起使用 让登录和墙贴操作在 iOS5 和 iOS6 版本中
  • 如果连接了硬件键盘,则隐藏 inputAccessoryView

    类似于这个问题 iPad 检测外接键盘 https stackoverflow com questions 5019471 ipad detecting external keyboard 我正在开发一个 iPad 应用程序 该应用程序使用
  • list.item(0) 与 list[0]

    document getElementsByTagName a item 0 and document getElementsByTagName a 0 将返回相同的结果 前者比后者快吗 自制性能测试 http jsfiddle net 4
  • 在 Ubuntu 16.04 Xenial 和 apache 上安装 php 5.3 或 5.4

    我想在 Ubuntu 16 04 Xenial 和 Apache 上安装 php 5 3 或 5 4 教程指导我使用 PPA 但他们没有帮助我满足我的需要 我知道 PHP 5 3 和 4 已过时 但我需要这个项目 这可能吗 如果是 那么请教
  • AVURLAsset 未加载(.mov 文件)

    我正在尝试加载一个名为 output mov 在 iPhone 上创建 的文件作为AVURLAsset使用以下代码 NSURL outputURL NSURL fileURLWithPath NSString stringWithForma
  • 如何通过单击div外部的按钮来更改div的内容?

    感谢您花时间阅读这篇文章 希望问同样问题的人也能得到答案 我正在开发一个分为 8 个大 div 的单页面网站 这样当您单击菜单栏时 它会将您带到其中一个 div 或 页面 在我网站的介绍部分的一个 div 或页面 上 我试图引入这种效果 h
  • 获取 GDK_BACKEND 与 debian 中的可用显示错误不匹配

    实际上我正在尝试通过 selenium 在远程 debian 服务器中运行无头浏览器 我在服务器中安装了 firefox 46 0 1 我使用的是 selenium 2 53 1 版本 每当我尝试运行给定的测试时 我都会收到以下错误 org
  • 如何在R中检查字符串是否包含罗马数字?

    我的数据集 ad 中有一个住宅地址列 我想检查没有数字 包括罗马数字 的地址 我在用着 ad check lt grepl digit ad address 标记出不存在数字的地址 如何对包含罗马数字的地址执行相同的操作 例如 ABC Ci
  • 找出给定颜色的互补色/相反色

    我正在尝试使用 Python 找出给定颜色的补色 这是我的代码 代码返回错误消息 告诉 AttributeError list 对象没有属性 join 我需要提示 此外 可能有一个更强大的代码来计算相反 互补的颜色 这是我基本上正在寻找的
  • “contentsOfFile”返回 nil,可能的原因

    当获取 csv 文件的内容时 以下内容返回 nil 但是 将 csv 表减少到 10 行将正常工作 输出 csv 文件的内容 原始 csv 约有 400 000 个字符 排列在 500 行和 11 列中 是什么导致原始 csv 返回 nil
  • 跨多个 js 文件拥有多个 $(document).ready 函数的含义[重复]

    这个问题在这里已经有答案了 可能的重复 JQuery 多个 document ready https stackoverflow com questions 5263385 jquery multiple document ready 拥有
  • Microsoft.Bcl.Async 如何工作?

    Microsoft Bcl Async使开发人员能够使用async await没有 NET Framework 4 5 的关键字 它们应该以使用它们为目标 这太棒了 这要归功于 Microsoft CLR 和语言团队的人们的辛勤工作 现在我
  • 打包一个应用程序,包括java war文件、Tomcat、DB

    我有一个基于java的Web应用程序 我有源代码和war文件 该应用程序使用mySql并且需要一些像tomcat这样的Web服务器 所有这些都被添加到可以直接安装的包中window and linux直接机器 我需要一次性设置数据库 Web
  • JavaScript 竞争条件

    我正在调用一个 javascript 函数 该函数快速连续未知次数地设置 iframe 的不透明度 基本上这将 alpha 从 0 调整到 100 这是代码 function setAlpha value iframe style opac
  • Jitpack:无法安装以下 Android SDK 包,因为某些许可证尚未被接受

    我用谷歌搜索过 有人说经过几次尝试并通过创建新版本已修复 但它似乎对我不起作用 我该如何解决这个问题 What went wrong A problem occurred configuring project analytics gt F
  • 如何在 SQLAlchemy 中执行此递归公用表表达式?

    在此表架构中 class Location db Model id db Column db String 255 primary key True parent id db Column db String 255 db ForeignK
  • 混合自定义序列化和基本序列化?

    我有一个具有超过 100 个属性的类 它是一个数据库映射类 其中一个属性必须位于方法中 换句话说 这些数据不是通过属性而是通过方法公开的 ABCType GetABC SetABC ABCType 值 这一切都非常不像 C 当我看到它时我不
  • 我可以明确定义引导程序应切换到响应式移动版本的最小像素宽度吗?

    我使用 bootstrap 响应式 要么我做错了什么 要么 bootstrap 没有像我希望的那样响应灵敏 下面你会看到 4 种可能的状态 我会避免中间的两种 要么像第一种情况那样一切都是内联的 要么像情况 4 那样强制引导程序成为 移动
  • 在两列之一中查找带有参数的行?

    我有这张桌子 需要帮助 Friends My E Mail VARCHAR Friends E Mail VARCHAR email protected cdn cgi l email protection email protected
  • 计算二叉树的单个垂直行中的节点之和

    对于二叉树 我想获得落在单个垂直线上的所有节点的总和 我想要每个垂直节点中的节点总和 A B C D E F G H I 如果你看上面的 T 恤 line 0 A E F so sum A E F line 1 B I so sum B I