使用 Java 和递归进行二叉树的级别顺序遍历

2024-03-06

我在使用递归时遇到二叉树的级别顺序遍历问题。我输入以下值:50,60,70,30,20,10 这是我正在使用的代码:

    public void levelOrder(Node localRoot){
    if(localRoot != null){
        if(localRoot.leftChild != null && localRoot.rightChild != null){
            System.out.print(localRoot.iData + " ");
            System.out.print(localRoot.leftChild.iData + " ");
            System.out.print(localRoot.rightChild.iData + " ");
            levelOrder(localRoot.leftChild);
            levelOrder(localRoot.rightChild);
        }
        else if(localRoot.rightChild == null && localRoot.leftChild == null){
            ;
        }
        else if(localRoot.rightChild == null){
            System.out.print(localRoot.leftChild.iData + " ");
            //levelOrder(localRoot.leftChild);
        }
        else{
            System.out.print(localRoot.rightChild.iData + " ");
            //levelOrder(localRoot.rightChild);
        }
    }
}

不使用堆栈可以递归吗?因为目前这个函数将我一路向左,然后向右。我可以做些什么不同的事情?

我的这段代码的输出是:50、30、60、20、70,但它不打印 10。


有趣的是,这是一个相当常见的问题(谷歌“递归面包首先遍历”,并且有几个类似答案的 stackoverflow 链接)

到目前为止最好的就在这里

递归执行广度优先搜索 https://stackoverflow.com/questions/2549541/performing-breadth-first-search-recursively

我同意最佳答案的作者的观点,将迭代算法(广度优先遍历)转变为递归解决方案确实没有意义。正如前面提到的,将迭代转变为尾递归是很容易的,但是这样做的目的是什么?而且你仍然需要排队。

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

使用 Java 和递归进行二叉树的级别顺序遍历 的相关文章

  • Java Swing:从 JOptionPane 获取文本值

    我想创建一个用于 POS 系统的新窗口 用户输入的是客户拥有的金额 并且窗口必须显示兑换金额 我是新来的JOptionPane功能 我一直在使用JAVAFX并且它是不同的 这是我的代码 public static void main Str
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • 多个 Maven 配置文件激活多个 Spring 配置文件

    我想在 Maven 中构建一个环境 在其中我想根据哪些 Maven 配置文件处于活动状态来累积激活多个 spring 配置文件 目前我的 pom xml 的相关部分如下所示
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • Liferay ClassNotFoundException:DLFileEntryImpl

    在我的 6 1 0 Portal 实例上 带有使用 ServiceBuilder 和 DL Api 的 6 1 0 SDK Portlet 这一行 DynamicQuery query DynamicQueryFactoryUtil for
  • 操作错误不会显示在 JSP 上

    我尝试在 Action 类中添加操作错误并将其打印在 JSP 页面上 当发生异常时 它将进入 catch 块并在控制台中打印 插入异常时出错 请联系管理员 在 catch 块中 我添加了它addActionError 我尝试在jsp页面中打
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • Java TestNG 与跨多个测试的数据驱动测试

    我正在电子商务平台中测试一系列商店 每个商店都有一系列属性 我正在考虑对其进行自动化测试 是否有可能有一个数据提供者在整个测试套件中提供数据 而不仅仅是 TestNG 中的测试 我尝试不使用 testNG xml 文件作为机制 因为这些属性
  • 如何在 javadoc 中使用“<”和“>”而不进行格式化?

    如果我写
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • 声明的包“”与预期的包不匹配

    我可以编译并运行我的代码 但 VSCode 中始终显示错误 早些时候有一个弹出窗口 我不记得是什么了 我点击了 全局应用 从那以后一直是这样 Output is there but so is the error The declared
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 将 List 转换为 JSON

    Hi guys 有人可以帮助我 如何将我的 HQL 查询结果转换为带有对象列表的 JSON 并通过休息服务获取它 这是我的服务方法 它返回查询结果列表 Override public List
  • 使用 xpath 和 vtd-xml 以字符串形式获取元素的子节点和文本

    这是我的 XML 的一部分

随机推荐

  • 正则表达式 - 查找字符串中的特定数字

    我一整天都在与正则表达式作斗争 找不到解决方案 我试图在包含数字 分号 冒号和空格的字符串中找到一些特定的数字 出于我们的目的 假设我正在寻找号码1234 以下是一些应该匹配的示例 每一行都是不同的字符串 1234 1234 1234 56
  • 缺乏释放会导致什么样的问题?

    我目前遇到问题 glibc detected efit free invalid next size fast 0x00000000006127f0 带有通常的内存映射和回溯信息glibc错误 但是 我无法找到这个问题的原因 看起来 基本上
  • 我如何在 SQL SERVER 2008 中使用 Active Directory 用户进行身份验证但没有 Windows 身份验证

    在网上查阅了很多资料后 我找不到解决方案 我希望你理解我 我的英语不是最好的 Issue 我想使用域 活动目录 的有效用户对 SQL Server 进行身份验证 该用户是从我的应用程序 旧应用程序 的登录名 用户名和密码 中获取的 登录到我
  • Haskell 中带有元组参数的函数组合[重复]

    这个问题在这里已经有答案了 有时我有两种形式的函数 f a gt b1 b2 h b1 gt b2 gt c 我需要组合物 g 我通过将 h 更改为 h 来解决这个问题 h b1 b2 gt c 你能告诉我 如果可能的话 一个函数 m 吗
  • 卸载netbeans 7.0.1插件,netbeans无法启动

    安装 python 插件后 Vista 上的 Netbeans 7 0 1 无法启动 如何手动卸载插件 是否有命令行参数可以在没有插件的情况下启动netbeans 如果没有 这应该很容易添加到 netbeans 我遇到过同样的问题 这是我在
  • 如何使用pypyodb在python中正确连接到sql server

    当我输入代码时 connection pypyodbc connect driver SQL Server server ServerName database DatabaseName uid UserId pwd Password 我收
  • 包含 UTF-8 字符的批处理文件中的命令行参数会导致问题

    我编写了一个小实用程序 它采用路径作为命令行参数 但如果 且仅当 该参数是从批处理文件传递并包含 UTF 8 字符 如变音符号 时 不幸的是 这在以下情况下相当常见 我就会遇到麻烦 系统语言为德语 我可以从项目调试属性中传递带有元音变音的文
  • 使用公式R1C1内的变量进行抵消

    我有以下代码行 ActiveCell FormulaR1C1 sqrt RC 1 现在我想使用一个变量 例如 x 而不是 1 如下所示 ActiveCell FormulaR1C1 sqrt RC x 这会返回一个错误 我有什么办法可以做到
  • 如何更改 SwiftUI 中导航栏的背景颜色?

    我想更改导航栏的背景颜色 但我做错了什么 颜色看起来如此不同 My code UINavigationBar appearance backgroundColor red return VStack spacing 0 Text Test
  • 如何在 JS 中导出文件中的所有函数?

    我正在创建一个单位转换器 并且我想将所有转换函数放入它们自己的文件中 使用ES6export 有没有什么方法可以仅使用一行导出文件中的所有函数及其默认名称 例如 export default all 这些函数都只在文件中 而不是在对象内 不
  • 如果列为空,SQLiteCursor 会做什么?

    我想从 SQLite 查询返回的游标中获取一个整数 但我知道该整数可能为空 不幸的是 我找不到任何允许我检查这一点的 Cursor 方法 代码将是 mModifiedDate cursor getInt cursor getColumnIn
  • 如何将 libcurl 与 dev c++ 静态链接?

    最近我尝试将 libcurl 与 dev c 静态链接 我链接了除来自 libcurl 的 libcurldll a 文件之外的所有 a 文件 并且我定义了 CURL STATICLIB 但我收到了一些链接器错误 然后我在谷歌上搜索了这个链
  • Java POS 开发入门

    我有一个要求 需要从 Java Swing 应用程序连接到 POS 打印机 我了解到有一个名为 Java POS 的标准可以实现这一目标 现在问题出在java POS网站上 http www javapos com http www jav
  • 变换:翻译和位置:相对的区别;?

    正如标题所说 transform translate x y 和position relative之间有什么区别 既然它们都完成相同的事情 位置元素 那么它们在目的和应用方面有何不同 我读了一篇关于使用 transform translat
  • 线程本地存储GCC编译器

    我声明一个变量 thread int my id 我的平台和编译器的信息 Configured with src configure v with pkgversion Ubuntu Linaro 4 6 1 9ubuntu3 with b
  • 带两个参数的 python pandas 滚动函数

    我这个初学Python的人对Python的热爱正经受着艰难的考验 我需要在固定长度的滚动窗口中计算一个函数 假设 5 该函数需要两个参数 我很清楚答案here https stackoverflow com questions 256753
  • TypeError [ERR_UNKNOWN_FILE_EXTENSION]:Visual Studio Code 上的未知文件扩展名“.ts”

    我一直在对一些代码进行单元测试 似乎不知从何而来 我收到了有关未知文件扩展名的错误 之前 我收到了有关如何无法识别某些类型的错误 这是我的 package json name cgt core engine mv description A
  • 我们可以在 mysql 程序之外声明游标吗

    我无法声明游标 mysql中游标的意义是什么 declare c1 cursor for select name from record ERROR 1064 42000 您的 SQL 语法有错误 检查 与您的 MySQL 服务器版本相对应
  • 如何从测试目录中的文件访问 src 目录中的文件?

    我的项目布局如下所示 src int rle rs lib rs tests test int rle rs 该项目编译为cargo build 但我无法运行测试cargo test 我收到错误 error E0432 unresolved
  • 使用 Java 和递归进行二叉树的级别顺序遍历

    我在使用递归时遇到二叉树的级别顺序遍历问题 我输入以下值 50 60 70 30 20 10 这是我正在使用的代码 public void levelOrder Node localRoot if localRoot null if loc