二叉搜索树的广度优先遍历 C++

2024-03-08

也许是快速/简单的问题。我已经实现了一个二叉树,然后我希望将二叉搜索树转换为数组,或者至少像在数组中一样打印出来。我遇到的问题是如何获取 '\0' 中的 NULL/标志。

例如,假设我有一棵树,如下所示:

                10
               /  \
              6   12
             / \   \
            1  8   15
             \
              4   

我希望它按其应有的方式打印。喜欢:

        [10,6,12,1,8,\0,15,\0,4,\0,\0,\0,\0,\0,\0]
        ^Something Like this^ I don't know if I counted the NULL correctly.

或者我想如何以视觉方式显示我的树的另一个选项是如何正确输出间距,就像使用指向父级的键的“/”和“\”一样:

                10
               /  \
              6   12
             / \   \
            1  8   15
             \
              4   

这是我尝试在代码方面详细阐述的内容,但我卡住了:

void BreadthFirstTravseral(struct node* root)
{
    queue<node*> q;

    if (!root) {
        return;
    }
    for (q.push(root); !q.empty(); q.pop()) {
        const node * const temp_node = q.front();
        cout<<temp_node->data << " ";

        if (temp_node->left) {
            q.push(temp_node->left);
        }
        if (temp_node->right) {
            q.push(temp_node->right);
        }
    }
}

任何类型的帮助或链接和/或建议和/或示例代码将非常感激。


由于键可能有多个数字,因此很难正确获得间距,这会影响给定节点之上所有级别的间距。

至于如何添加NULL- 只需为打印 NULL 的 ifs 添加 else 子句:

if (root) {
  q.push(root);
  cout << root->data << " ";  
} else {
  cout << "NULL ";
}
while (!q.empty()) {
    const node * const temp_node = q.front(); 
    q.pop();

    if (temp_node->left) {
      q.push(temp_node->left);
      cout << temp_node->left->data << " ";
    } else {
      cout << "NULL ";
    }


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

二叉搜索树的广度优先遍历 C++ 的相关文章

  • Asp.net core默认路由

    简化版Startup code public void ConfigureServices IServiceCollection services services AddMvc public void Configure IApplica
  • 调用许多网络服务的最佳方式?

    我有 30 家子公司 每家都实施了他们的 Web 服务 使用不同的技术 我需要实现一个Web服务来聚合它们 例如 所有子公司的Web服务都有一个名为的Web方法GetUserPoint int nationalCode 我需要实现我的网络服
  • 通过另一个列表更新列表(linq)

    我有类 Data 的对象列表 如下所示 class Data int code string name DateTime date update 我还有另一个课程列表 例如 class RefCodes int old code int n
  • 为什么在 C++ 中声明枚举时使用 typedef?

    我已经很多年没有写过任何 C 了 现在我正试图重新开始 然后我遇到了这个并考虑放弃 typedef enum TokenType blah1 0x00000000 blah2 0X01000000 blah3 0X02000000 Toke
  • 在 Mac OS X 上安装 libxml2 时出现问题

    我正在尝试在我的 Mac 操作系统 10 6 4 上安装 libxml2 我实际上正在尝试在 Python 中运行 Scrapy 脚本 这需要我安装 Twisted Zope 现在还需要安装 libxml2 我已经下载了最新版本 2 7 7
  • MSMQ接收和删除

    是否有任何选项可以在读取消息后将其从 MSMQ 中删除 比如 接收 删除可以作为原子操作运行吗 听起来您想查看下一条消息 然后在处理完成后接收它 Message message Queue Peek Queue ReceiveById me
  • 为什么 C# 中同一类型的隐式和显式运算符不能共存? [复制]

    这个问题在这里已经有答案了 为什么同一类中两个相同类型的运算符 显式和隐式 不能共存 假设我有以下内容 public class Fahrenheit public float Degrees get set public Fahrenhe
  • C 类型命名约定,_t 或 ALLCAPS

    我一直想知道是否有任何命名约定 例如何时对类型使用全部大写以及何时追加 t 什么时候不使用任何东西 我知道当时 K R 发布了各种有关如何使用 C 的文档 但我找不到任何相关内容 在 C 标准库类型中 t看起来漂亮占主导地位 time t
  • 提升mapped_file_source、对齐方式和页面大小

    我正在尝试在性能很重要的上下文中解析一些大小高达几百兆字节的文本文件 因此我使用 boostmapped file source 解析器期望源以空字节终止 因此我想检查文件大小是否是页面大小的精确倍数 如果是 则使用较慢的非内存映射方法 我
  • 名称查找、实例化点 (POI) 和基本类型

    以下代码针对 X 进行编译 但不适用于 double struct X void foo double void foo X namespace NN struct A void foo A foo double error foo not
  • “没有合适的默认构造函数可用”——为什么会调用默认构造函数?

    我已经查看了与此相关的其他一些问题 但我不明白为什么在我的情况下甚至应该调用默认构造函数 我可以只提供一个默认构造函数 但我想了解它为什么这样做以及它会产生什么影响 error C2512 CubeGeometry no appropria
  • 在 C 语言中替换宏内的宏

    我正在尝试使代码部分可重用 我下面的评论片段没有达到我想要的效果 define NAME ABC define LOG SIZE NAME LEN 我想LOG SIZE决心ABC LEN 我尝试过使用 但没能让它发挥作用 LOG SIZE在
  • 如果在代码中添加元素,“FindName”将不起作用

    在 WPF 应用程序中 如果在 XAML 中声明 ContentControl
  • 在 C++ 代码 gdb 中回溯指针

    我在运行 C 应用程序时遇到段错误 在 gdb 中 它显示我的一个指针位置已损坏 但我在应用程序期间创建了 10 万个这样的对象指针 我怎样才能看到导致崩溃的一个 我可以在 bt 命令中执行任何操作来查看该指针的生命周期吗 谢谢 鲁奇 据我
  • 如何对STL向量进行排序?

    我想排序一个vector vector
  • 时间:2019-03-17 标签:c#TimerStopConfusion

    我想通过单击按钮时更改文本颜色来将文本框文本设置为 闪烁 我可以让文本按照我想要的方式闪烁 但我希望它在闪烁几次后停止 我不知道如何在计时器触发几次后让它停止 这是我的代码 public Form1 InitializeComponent
  • 使用 boost 异步发送和接收自定义数据包?

    我正在尝试使用 boost 异步发送和接收自定义数据包 根据我当前的实现 我有一些问题 tcpclient cpp include tcpclient h include
  • 在 C 中使用 #define 没有任何价值

    If a define没有任何价值地使用 例如 define COMMAND SPI 默认值是0吗 不 它的评估结果为零 从字面上看 该符号被替换为空 然而 一旦你有了 define FOO 预处理器条件 ifdef FOO现在将是真的 另
  • 运行 xunit 测试时无法将输出打印到控制台窗口

    public class test2InAnotherProject private readonly ITestOutputHelper output public test2InAnotherProject ITestOutputHel
  • IDisposable 的显式实现

    虽然有很多关于IDisposable在 SO 上找到 我还没有找到答案 我通常遵循这样的做法 当我的一个班级拥有一个IDisposable对象然后它也实现IDisposable并打电话Dispose在拥有的对象上 然而最近我遇到了一个类 它

随机推荐

  • 如何使 require() 采取文件的直接路径

    所以我有以下代码 问题是当我循环遍历数组中的每个文件并尝试要求文件路径时 它给我一个找不到模块的错误 local Commands function getCommands local readdir fs readdir local re
  • kubectl:来自服务器的错误:当前没有打开 SSH 隧道

    我正在 Google Container Engine 上运行一些容器 有一天一切都很好 第二天就不行了attach不再到我的容器了 或者exec 或任何其他 docker 命令 我删除了 Pod 并让新的 Pod 实例化 但没有帮助 然后
  • JavaScript 中自定义类似数组的 getter

    我有一个简单的 ES6 类 如下所示 class Ring extends Array insert item index this splice index 0 item return this 我想让 Ring 对象的索引换行 这样ne
  • 为什么 F# 编译器对一种情况给出错误,而对另一种情况则不给出错误?

    我正在处理来自 F 的平台调用 并且收到一个编译器错误 我真的无法理解 首先 让我展示一下我正在做的事情的 C 签名 int Foo ULONG PTR phHandle DWORD flags 在 F 中 我认为本地调用它的正确方法如下
  • 如何使 fitBounds 感知自定义控件

    我的谷歌地图左侧有一个大型 300 500px 自定义控件 我将我的标记聚集在一起 当用户单击标记时 我想放大地图以显示该群集中的标记 问题是 当我得到标记集合的边界时 然后map fitBounds collection bounds 我
  • 如何在 Rake 任务中执行命令?

    我的 Rails 应用程序中有 rake 任务 我想在 rake 任务中运行命令行命令 我怎样才能做到这一点 我尝试了以下方法但失败了 desc Sending the newsletter to all the users task se
  • 如何从框架中获取用户输入并保存到txt文件中?

    我的程序运行如下 我有一个带有添加按钮 保存按钮和选项卡控件的表单 当单击表单中的添加按钮时 选项卡控件将添加更多选项卡项目 tabitem 基本上是从 myframe 添加的 其中包括用户在 TEdit 中键入的值 我想要实现的是当我点击
  • 如何在 RxJava 中延迟地从列表中发出项目?

    我正在使用 Retrofit 从 REST API 获取书签 public interface BookmarkService GET bookmarks Observable
  • UiWebView 委托方法未被调用

    我正在尝试在 webView 中播放 youtube 嵌入视频 当我未设置委托时它会播放 并且如果我设置委托视频不会加载 并且委托方法也不会被调用 这是我的代码 m class import EmbeddedVideoVC h interf
  • 数组之间的交集索引

    是否有一种快速方法可以将数组的每个元素与唯一标识符列表中的每个元素进行比较 使用 for 循环来遍历每个唯一值是可行的 但速度太慢而无法使用 我一直在寻找矢量化解决方案 但没有成功 任何帮助将不胜感激 arrStart startRavel
  • http 错误 403.14-禁止

    我成功地将我的测试 html 页面托管在iis8 当我尝试托管已经创建的网站时 我得到了http错误 403 14 禁止 即使我将默认文档设置为具有框架的起始 html 页面 该网站有几个文件夹内部文件夹 当我启用目录浏览时 它将列出该页面
  • Process.start() 启动的进程返回错误的进程 ID?

    我正在使用以下代码启动可执行文件 Process proc new Process proc StartInfo FileName executablePath proc Start proc WaitForInputIdle 在这次通话之
  • 使用 Process、RegistryKey 将 .NET Framework 代码移植到 .NET Standard

    我有一个来自现有 NET Framework 项目的方法 该方法从注册表获取 Windows 中默认浏览器的路径 并使用Process call string browser RegistryKey regKey null try regK
  • 请参阅调试目的的 Firebase 网络流量

    我希望能够使用 Charles Proxy 调试 firebase 分析 我无权访问源代码 因此无法在 Firebase 中启用调试视图 我想要跟踪网络流量 以便能够使用 Firebase Analytics 数据的 Charles 代理查
  • 从 LINQ to SQL 生成的 T-SQL 缺少 where 子句

    我有一个名为 CodeLookupAccessDataContext 的 DataContext 对象 它是通过 Visual Studio LINQ to SQL 类向导生成的 我扩展了该对象的功能 使其公开一些方法来返回 LINQ to
  • 如何将 javascript 代码注入到每个原型方法的开头?

    我想在 javascript 中注入代码 用于调试目的 在每个人我的 JavaScript 方法原型 这个例子只显示了一个类 但是假设我有数百个类 每个类有几十个方法 该机制应该在原型级别执行 而不需要指定每个类 方法名称 function
  • 何时“让它崩溃”以及何时捍卫 Erlang 中的代码?

    因此 带着 让它崩溃 的口号 Erlang 代码意味着能够抵御残酷的世界事件 例如意外拔出插头 硬件故障和不稳定的网络连接 另一方面 有防御性编程 https en wikipedia org wiki Defensive programm
  • Coq QArith 除以零就是零,为什么?

    我注意到在 Coq 的有理数定义中 零的倒数被定义为零 通常 除以零是没有明确定义 合法 允许的 Require Import QArith Lemma inv zero is zero 0 0 Proof unfold Qeq refle
  • 启动时不继承父文件描述符

    我需要使用 start 命令在 winXP 上启动一些进程 听起来很简单 但是有没有办法让启动的进程不会继承父进程的任何端口 我在我的程序中使用以下方法启动孩子 system start x params 现在 当父进程被杀死时 我无法再次
  • 二叉搜索树的广度优先遍历 C++

    也许是快速 简单的问题 我已经实现了一个二叉树 然后我希望将二叉搜索树转换为数组 或者至少像在数组中一样打印出来 我遇到的问题是如何获取 0 中的 NULL 标志 例如 假设我有一棵树 如下所示 10 6 12 1 8 15 4 我希望它按