二叉树实现C++

2024-05-03

二叉树插入:

#include "stdafx.h"
#include <iostream>

using namespace std;

struct TreeNode {
  int value;
  TreeNode* left;
  TreeNode* right;
};

struct TreeType {
  TreeNode* root;

  void insert(TreeNode* tree, int item);

  void insertItem(int value) {
    insert(root, value);
  }
};

void TreeType::insert(TreeNode* tree, int number) {
  if (tree == NULL) {
    tree = new TreeNode;
    tree->left = NULL;
    tree->right = NULL;
    tree->value = number;
    cout << "DONE";
  } else if (number < tree->value) {
    insert(tree->left, number);
  } else {
    insert(tree->right, number);
  }
}

int main() {
  TreeType* MyTree = new TreeType;
  MyTree->insertItem(8);

  return 0;
}

我目前正在学习 C++ 中的数据结构,这是在二叉树中进行插入的代码。

编译后,一切看起来都很好,但是当我尝试执行该程序时,它崩溃了。

谁能告诉我我哪里错了?


在树构造函数中,您需要将根指针初始化为 NULL。不保证它被初始化为 NULL。

当你在linux中编译时,你可以使用gdb来显示段错误的来源。

其他一些注意事项:

  1. 您应该将值分配回root分配新节点后。你没有这样做是因为你缺少 C++ 的基础知识之一。也就是说,它是基于c的。关于 c 的问题是,它是严格的“按值”函数/方法调用范例。所以函数调用中的所有参数都是按值传递的。当您传入 root 的内存地址时,实际上是在复制指针的值。然后,您只需更新本地值。您需要将其分配回 root。如果您想从头到尾学习这个概念,我强烈建议您观看.
  2. 在你的主函数中,你应该尝试将符号名称保留为小写而不是驼峰命名。这有助于区分变量和类型(类型应保持驼峰命名法)。
  3. 在 TreeType::insert 方法中,您应该调用变量 tree_node 而不是 tree。这样做有助于反映正确的类型并避免混淆。
  4. 只要有可能,请尝试使用this->root and this->insert符号。如果您不小心创建了本地范围的文件,它不仅会正确解析root变量,但读者也更清楚数据或方法的定义位置。优秀的编码与沟通有关。读者可能只需要 100-500 毫秒就能理解该符号指向的位置;然而,在避免歧义方面所积累的微小节省加起来就会成为一个更加清晰的软件。未来的你(和你的同事)会感谢你。看http://msmvps.com/blogs/jon_skeet/archive/2013/09/21/career-and-skills-advice.aspx http://msmvps.com/blogs/jon_skeet/archive/2013/09/21/career-and-skills-advice.aspx

最后,我怎么强调从源头学习的重要性都不为过。如果您是第一次学习 C 或 C++,请阅读http://www.amazon.com/The-Programming-Language-4th-Edition/dp/0321563840 https://rads.stackoverflow.com/amzn/click/com/0321563840 and http://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628 https://rads.stackoverflow.com/amzn/click/com/0131103628。它将为您节省数小时、数小时、数小时。从源代码中学习之后,编程也会变得更加有趣,因为您了解了大部分概念。而且,事实是,当你拥有一定水平的能力时,事情会变得更有趣。

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

二叉树实现C++ 的相关文章

随机推荐

  • 即使我确实为变量设置了初始值,数据段也没有被初始化

    我已经编写了一个代码 该代码应该生成某种数字列表 但是即使我为它们分配了初始值 我的数据段变量也没有被初始化 This is how DS 0000 looks when I run it 这是我的代码 但数据段只保留垃圾值 MODEL s
  • 实体框架的状态模式

    我有一个模型Enquiry 它可以处于两种状态之一 还有更多状态 但出于此目的 我将仅比较两种状态 New and Closed 查询所处的状态取决于用户能够对查询执行什么操作 例如 无法删除已关闭的查询 而可以删除新的查询等等 基本示例
  • Windows Phone 8.1 应用程序多语言

    我正在使用 Visual Studio 2015 在 SilverLight 中创建 Windows Phone 应用程序 8 1 我正在用英语和阿拉伯语创建多语言应用程序 为此 我在项目中创建了 Strings 文件夹 其中包含 en U
  • 仅从 MySQL 中的日期时间 (YYYY-MM-DD HH:MM:SS) 中选择不同的日期

    执行此命令会带来以下结果 所有列中的所有日期 因此它本质上与 SELECT date 执行相同的操作 没有不同 SELECT DISTINCT date FROM daily ORDER BY date DESC 2013 02 12 16
  • 如何在 Android Studio 中为单独的模块生成签名的 APK?

    我的项目有 3 个模块 include app include videograbber include audiograbber 现在我想为Videograbber模块生成签名的APK 当我在 Android Studio 中使用 生成签
  • 自定义 UIAlertView?

    鉴于蓝色与我的 UI 界面不相配 我只是想知道是否有办法更改 uialertview 的颜色 或者使用图像代替 所有按钮 关闭 等仍然存在 Thanks CodeCropper 的优秀人员刚刚推出了一个开源控件 可让您创建自定义警报视图 这
  • Big O 用于有限、固定大小的可能值集

    这个问题 https stackoverflow com questions 12305028 java what is the best way to find first duplicate character in a string引
  • 在画布中的鼠标位置放大/缩小

    我正在尝试使用 p5 js 实现缩放功能 当前缩放级别以及 x 和 y 位置存储在controls view目的 默认位置或 0 0 位置位于左上角 问题是调整放大 缩小时的 x 和 y 位置值 以便无论视图的当前位置是什么 它都会停留在缩
  • 调试 python Web 服务

    我正在使用找到的说明here http www diveintopython net http web services user agent html 尝试检查发送到我的网络服务器的 HTTP 命令 但是 我没有看到按照教程中的建议在控制
  • cuda中有模板化的数学函数吗? [复制]

    这个问题在这里已经有答案了 我一直在寻找 cuda 中的模板化数学函数 但似乎找不到 在普通的 C 中 如果我调用std sqrt它是模板化的 并且将根据参数是浮点数还是双精度数执行不同的版本 我想要这样的 CUDA 设备代码 我的内核将真
  • registerForActivityResult TakePicture 未触发

    我尝试使用新的 registerForActivityResult 来拍照 我可以打开相机意图 但拍照后 未触发回调 并且我在 logcat 上看不到任何有关 Activity Result 或错误的信息 我也尝试了RequestPermi
  • 如何在android中格式化长整型以始终显示两位数

    我有一个倒计时器 显示从 60 到 0 的秒数 1 分钟倒计时器 当它达到 1 位数字 例如 9 8 7 时 它显示 9 而不是 09 我尝试使用String format B 02d B x 我将 x 从 long 转换为字符串 它不起作
  • 角度材质选择不会检测嵌套组件生成的选项的更改

    我正在尝试提取过滤和显示我的逻辑mat option是我的mat selects 到他们自己的组件中 然而 由于某种原因 会显示选项 但单击它们不会触发事件 我正在编写的网络应用程序有很多mat select每个都可能有很多mat opti
  • 实体框架..自引用表..获取深度=x的记录?

    我成功地在实体框架中使用自引用表 但我不知道如何获得所需深度的记录 这应该是什么逻辑 Model public class FamilyLabel public FamilyLabel this Children new Collectio
  • fread 的填充选项

    假设我有这个 txt 文件 AA 3 3 3 3 CC ad 2 2 2 2 2 ZZ 2 AA 3 3 3 3 CC ad 2 2 2 2 2 With read csv I can gt read csv linktofile txt
  • 验证仅适用于数组的第一项

    给定这个模型代码 Required Display Name Name public string Name get set 以下查看代码有效 Html LabelFor model gt model Name Html TextBoxFo
  • 如何在 .NET 6.0 中使用最小 Api 配置 Newtonsoft Json

    I have net6 0具有最少 api 的项目 我想使用NetwtonsoftJson而不是内置的System Text Json用于序列化和反序列化的库 目前我有这个配置JsonOptions并且按预期工作 builder Servi
  • Laravel项目部署到Cpanel时出现404错误如何解决?

    我正在尝试将我的 laravel Laravel Framework 7 28 3 部署到 Cpanel 但出现 404 错误 我将项目上传到 public html 修改了 index php 文件以指向正确的文件 如下所示 我认为ind
  • React Native 中 SVG 中的定位图标

    背景 我正在尝试按照本教程将工具提示添加到react native svg图表中 教程链接 Link https levelup gitconnected com adding tooltip to react native charts
  • 二叉树实现C++

    二叉树插入 include stdafx h include