使用Java遍历到最深处

2023-11-24

我有一个如下的数据结构:

Task(id,name,subTasks[Task])

但问题是子任务可以包含具有另一个子任务的任务。这可以运行得很深,如下所示:

Task1 Contains SubTask1

SubTask1 包含其子任务

你可以理解这可以深入到很深。

我可以从数据库表中检索这些数据。但是我怎样才能将它存储在java的数据结构中呢?在不了解深度的情况下使用 for 循环是没有用的,也不是一种优雅的方式。最好的数据结构和数据遍历方式是什么?


使用番石榴树遍历器:

Task root = ...

/*
 * For example, you have the following tree:
 *
 *          h
 *        / | \
 *       /  e  \
 *      d       g
 *     /|\      |
 *    / | \     f
 *   a  b  c        
 */

TreeTraverser<Task> traverser = new TreeTraverser<Task>() {
    @Override
    public Iterable<Task> children(Task root) {
        return root.subTasks;
    }
};

然后你可以迭代树for循环有几种方式:

// Iterate in breadth-first order (hdegabcf)
for (Task task : traverser.breadthFirstTraversal(root)) { ... }

or

// Iterate in preorder (hdabcegf)
for (Task task : traverser.preOrderTraversal(root)) { ... }

or

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

使用Java遍历到最深处 的相关文章

随机推荐

  • 第一次使用 SpriteKit 播放声音时出现轻微延迟

    当我使用 self playSoundFileNamed 播放声音时 第一次播放声音时会有一点延迟 整个应用程序冻结大约半秒 但之后就没问题了 我怎样才能摆脱这个 在我的游戏设置方法中 我做了类似的事情 看起来效果很好 拥有 iVar SK
  • 解压缩和 * 运算符[重复]

    这个问题在这里已经有答案了 python 文档将此代码提供为 zip 的逆操作 gt gt gt x2 y2 zip zipped 尤其 zip 与 运算符结合使用可用于解压缩列表 有人可以向我解释 运算符在这种情况下如何工作吗 据我了解
  • 如何在Android Studio项目中使用最新的FFMPEG?

    I have a simple task to make a video from multiple images and an audio file After searching a lot found that its possibl
  • 显示动画 GIF

    我想在我的应用程序中显示动画 GIF 图像 我发现 Android 本身并不支持动画 GIF 但是它可以使用显示动画动画绘图 开发 gt 指南 gt 图像和图形 gt 可绘制对象概述 该示例使用在应用程序资源中保存为帧的动画 但我需要的是直
  • 在 C# 中创建气球工具提示

    我可以知道如何在用 C 编码的应用程序中制作弹出气泡消息吗 例如 当我启动我的应用程序时 它会弹出 欢迎使用 UbuntuSE 应用程序 是的 弹出窗口不是消息框弹出窗口 而是托盘菜单中的弹出窗口 与此类似的东西 附言 如果我没记错的话 这
  • 使用 TypeScript 和注入的 AngularJS 过滤器

    有人可以给我提供一个示例 说明如何在 TypeScript 中创建使用依赖注入的 Angular 过滤器 底部是我目前拥有的 工作正常 但我想做的是我想要访问 filter 的函数 以便我可以将 return date ToString 行
  • 如何将 TRC20 交易发送到某个地址

    我正在使用 tron web 查询某个地址的交易 但它不会返回发送到该地址的交易 其中传输的代币为 TRC20 这是行不通的 我想获取某个地址上的交易并获取 TRX trc10 和 trc20 交易 我做错了什么或者该怎么做 这是我的代码块
  • 如何使用 JDBC 执行 .sql 脚本文件[重复]

    这个问题在这里已经有答案了 可能的重复 使用 MySQL 和 JDBC 运行 sql 脚本 我有一个 SQL 脚本文件 其中包含 40 50 个 SQL 语句 是否可以使用 JDBC 运行此脚本文件 此链接可能会帮助您 http paste
  • np.empty 与 np.zeros 的速度

    我正在使用 numpy 版本 1 14 3 和 python 2 7 12 参考文献this问题 我发现使用 np zeros 和 np empty 初始化数组之间的速度显着不同 但是 输出是相同的 import numpy as np r
  • 修改 ASP.NET 服务器端的 html 输出

    第三方的webcontrol生成以下代码来显示自己 div div
  • 如何在管道步骤中使用 Jenkins 侧边栏链接插件?

    我正在开发这个插件https plugins jenkins io sidebar link 在詹金斯侧栏中添加链接 该插件与 jenkins 项目配置一起使用 现在我正在尝试添加一个管道步骤来调用此插件 我已经尝试过下面的代码行 但它不起
  • Apache HttpClient 制作多部分表单帖子

    我对 HttpClient 很陌生 而且我发现缺乏 和 或明显不正确 文档非常令人沮丧 我正在尝试使用 Apache Http Client 实现以下帖子 如下所列 但不知道如何实际执行 下周我将埋头于文档中 但也许更有经验的 HttpCl
  • 在 Python 3 中使用 XPath 解析 XML

    我有以下 xml
  • 使用 Stream 并关闭流时出现错误的 WebFaultException

    我们有一个使用 WCF 构建的 REST API 我们使用 WebFaultException 处理所有后端异常 如下所示 throw new WebFaultException
  • 在 Maven 项目中包含非 Java 源

    我正在开始一个项目 我预计该项目将包含大量非 Java 代码 主要是 shell 和 SQL 脚本 我仍然想用 Maven 来管理这个项目 非 Java 源代码和 Maven 的最佳实践是什么 源码应该去哪里 它们在生命周期的不同阶段会发生
  • Google Visualization 堆叠条形图中的标签值和总计

    I am trying to display the value of each bar and then the total value of all bars in a stacked bar chart The problem is
  • 异常:应通过 PYTHONHASHSEED 禁用字符串哈希的随机性在 pyspark 中意味着什么?

    我正在尝试从 pyspark 中的列表创建字典 我有以下列表 rawPositions Gives 1009794 LPF6 Comdty BC22 Enterprise 3 0 3904 125 390412 5 1009794 LPF6
  • 逐步寻找 Activiti Alfresco Workflow 教程 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我在哪里可以找到 Activiti Alfresco 工作流程 尤其是自定义工作流程 的简单教程 我是 Alfresco Activiti Worf
  • 在 ASP.NET vNext 中,为什么代码不即时重新编译?

    我正在使用 k web 从命令行运行 HelloMvc 示例应用程序 我尝试使用 kvm use runtime 使用可用的不同环境来运行它 当我更改控制器并在浏览器中按 F5 或 Ctrl F5 时 代码不会自动重新编译 页面也不会更改
  • 使用Java遍历到最深处

    我有一个如下的数据结构 Task id name subTasks Task 但问题是子任务可以包含具有另一个子任务的任务 这可以运行得很深 如下所示 Task1 Contains SubTask1 SubTask1 包含其子任务 你可以理