C语言AVL树

2024-02-07

我目前正在做一个需要使用AVL树的项目, 我为 avl 编写的插入函数似乎不起作用,它最多适用于 3 或 4 个节点;

我将衷心感谢您的帮助 尝试如下

Tree insert(Tree t,char name[80],int num)
{
  if(t==NULL)
  {
    t = (Tree)malloc(sizeof(struct node));

    if(t! = NULL)
    {
      strcpy(t->name,name);
      t->num = num;
      t->left = NULL;
      t->right = NULL;
      t->height = 0;
    }
  }
  else if(strcmp(name,t->name)<0)
  {
    t->left = insert(t->left,name,num);

    if((height(t->left)-height(t->right))==2)
      if(strcmp(name,t->left->name)<0)
        t = s_rotate_left(t);
      else
        t = d_rotate_left(t);
  }
  else if(strcmp(name,t->name)>0)
  {
    t->right = insert(t->right,name,num);

    if((height(t->right)-height(t->left))==2)
      if(strcmp(name,t->right->name)>0)
        t = s_rotate_right(t);
      else
        t = d_rotate_right(t);
  }

  t->height = max(height(t->left),height(t->right))+1;

  return t;
}

我不知道您遇到了什么类型的错误,但有一些事情需要修复。

你需要决定当malloc失败。现在你正在设置height在这种情况下,在空指针上。

If height(NULL)返回 0,那么您将新节点的高度设置为 0,然后设置为 1。如果它返回 -1,则这些分配之一是多余的。

而你正在呼唤strcmp无缘无故两次。

我怀疑真正的问题埋藏在s_rotate_left, d_rotate_left, s_rotate_right, or d_rotate_right.

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

C语言AVL树 的相关文章

  • 机器人探索算法

    我正在尝试为机器人设计一种算法 试图找到位于未知位置的旗帜 该旗帜位于一个包含障碍物的世界中 机器人的任务是夺取旗帜并将其带到他的基地 代表他的起始位置 机器人在每一步只能看到有限的邻域 他事先不知道世界是什么样子 但他有无限的内存来存储已
  • C# SmtpClient编程中如何设置带有中文的附件文件名?

    我的代码如下 ContentType ct new ContentType ct MediaType MediaTypeNames Application Octet ct Name 这是一个很长的中文文件名希望能用它在附件名中 Doc A
  • 使用 ADAL v3 使用 ClientID 对 Dynamics 365 进行身份验证

    我正在尝试对我们的在线 Dynamics CRM 进行身份验证以使用可用的 API 我能找到的唯一关于执行此操作的官方文档是 https learn microsoft com en us dynamics365 customer enga
  • 如何使用 openSSL 函数验证 PEM 证书的密钥长度

    如何验证以这种方式生成的 PEM 证书的密钥长度 openssl genrsa des3 out server key 1024 openssl req new key server key out server csr cp server
  • 2个对象,完全相同(除了命名空间)c#

    我正在使用第三方的一组网络服务 但遇到了一个小障碍 在我手动创建将每个属性从源复制到目标的方法之前 我想我应该在这里寻求更好的解决方案 我有 2 个对象 一个是 Customer CustomerParty 类型 另一个是 Appointm
  • 使用 C# 和 ASP.NET 在电子邮件附件中发送 SQL 报告

    我正在尝试使用 ASP NET 和 C 从 sql reportserver 2008 作为电子邮件附件发送报告 到目前为止我学会了如何获取 PDF 格式的报告 http weblogs asp net srkirkland archive
  • 如何修复错误:“检测到无法访问的代码”

    我有以下代码 private string GetAnswer private int CountLeapYears DateTime startDate return count String answer GetAnswer Respo
  • 防止控制台应用程序中的内存工作集最小化?

    我想防止控制台应用程序中的内存工作集最小化 在Windows应用程序中 我可以这样做覆盖 SC MINIMIZE 消息 http support microsoft com kb 293215 en us fr 1 但是 如何在控制台应用程
  • 混合模型优先和代码优先

    我们使用模型优先方法创建了一个 Web 应用程序 一名新开发人员进入该项目 并使用代码优先方法 使用数据库文件 创建了一个新的自定义模型 这 这是代码第一个数据库上下文 namespace WVITDB DAL public class D
  • 如何向 Mono.ZeroConf 注册服务?

    我正在尝试测试 ZeroConf 示例http www mono project com Mono Zeroconf http www mono project com Mono Zeroconf 我正在运行 OpenSuse 11 和 M
  • 用于在标头更改时重新编译的简单 C 项目的示例 makefile

    有谁有完整的 makefile 可以执行以下操作 如果 HEADER 文件发生更改 则重建项目 cpp 文件在 makefile 中列出 头文件未在 makefile 中列出 头文件允许与 cpp 文件具有不同的名称 部分cpp文件没有头文
  • if constexpr 中的 not-constexpr 变量 – clang 与 GCC

    struct A constexpr operator bool const return true int main auto f auto v if constexpr v A a f a clang 6 接受该代码 GCC 8 拒绝它
  • 寻找局部最小值

    下面的代码正确地找到了数组的局部最大值 但未能找到局部最小值 我已经进行了网络搜索 以找到找到最小值的最佳方法 并且根据这些搜索 我认为我正在使用下面的正确方法 但是 在几天的时间里多次检查每一行之后 下面的代码中有一些我仍然没有看到的错误
  • LinkLabel 无下划线 - Compact Framework

    我正在使用 Microsoft Compact Framework 开发 Windows CE 应用程序 我必须使用 LinkLabel 它必须是白色且没有下划线 因此 在设计器中 我将字体颜色修改为白色 并在字体对话框中取消选中 下划线
  • 让网络摄像头在 OpenCV 中工作

    我正在尝试让我的网络摄像头在 Windows 7 64 位中的 OpenCV 版本 2 2 中捕获视频 但是 我遇到了一些困难 OpenCV 附带的示例二进制文件都无法检测到我的网络摄像头 最近我发现这篇文章表明答案在于重新编译一个文件 o
  • 如何从 Boost.PropertyTree 复制子树

    我有一些boost property tree ptree 我需要树来删除一些具有特定标签名称的元素 例如 xml 表示源ptree如下
  • C++ 指针引用混淆

    struct leaf int data leaf l leaf r struct leaf p void tree findparent int n int found leaf parent 这是 BST 的一段代码 我想问一下 为什么
  • C:设置变量范围内所有位的最有效方法

    让我们来int举个例子 int SetBitWithinRange const unsigned from const unsigned to To be implemented SetBitWithinRange应该返回一个int其中所有
  • 如何从 Windows Phone 7 模拟器获取数据

    我有一个 WP7 的单元测试框架 它在手机上运行 结果相当难以阅读 因此我将它们写入 XDocument 我的问题是 如何才能将这个 XML 文件从手机上移到我的桌面上 以便我可以实际分析结果 到目前为止 我所做的是将 Debugger B
  • winform c# 中的弹出窗口

    我正在开发一个需要弹出窗口的项目 但问题是我还希望能够通过表单设计器在此弹出窗口中添加文本框等 所以基本上我有一个按钮 当您单击它时 它将打开我在表单设计器中设计的另一个窗口 我一直在谷歌搜索 但还没有找到我需要的东西 所以我希望你们能帮助

随机推荐

  • 可以在C++中使用正则表达式吗?

    重复 C 中有一个使用模式匹配 使用正则表达式 的函数吗 https stackoverflow com questions 329517 there is a function to use pattern matching using
  • 将函数动态应用到 Postgres 表中的所有列

    使用 Postgres 13 1 我想对表的所有列应用前向填充函数 前向填充函数在我之前的问题中进行了解释 如何将前向填充作为 PL PGSQL 函数 https stackoverflow com questions 70987689 h
  • 创建应用程序域并加载程序集

    我想创建一个具有默认权限的应用程序域 并以默认权限将程序集加载到应用程序域中 并执行程序集中的方法 你可以看看以下文章 http msdn microsoft com en us library ms173139 aspx在 MSDN 上
  • F#,在不使用临时变量的情况下通过管道转发匹配情况

    我想在不使用临时变量或 lambda 的情况下将变量通过管道转发到匹配情况 想法 let temp x gt Function1 gt Function2 Many functions later gt FunctionN let resu
  • 在 Gradle 中定义不依赖的任务顺序?

    Question 当两个任务都被执行时 我能否以某种方式确保一个任务将在另一个任务之前 之后执行 我don t想要在它们之间添加始终存在的依赖关系 背景 我有两项任务 一项任务启动服务器 另一项任务对其运行测试 启动该服务器的任务在一个新进
  • 以编程方式快速向工具栏添加按钮

    我很难快速地向工具栏添加一个按钮 下面你可以看到我想要的工具栏的图像 不幸的是 即使我在故事板文件中设计了它 它也不会显示在将工具栏设置为可见 我设计的方式有两个项目 第一个是flexable space元素 第二个是add元素 它看起来像
  • HttpServletRequest#getRemoteAddr() 返回 NULL

    为什么HttpServletRequest getRemoteAddr http docs oracle com javaee 6 api javax servlet ServletRequest html getRemoteAddr 28
  • 大矩阵计算

    我用 C 编写了一个简单的代码 然后在 linux ubuntu 11 04 上用 g 编译它 没有收到任何错误 但是当我运行可执行文件时 收到此错误 分段错误 我知道我的代码没有问题 并且这个错误与编译器有关 有人可以帮助我吗 我的代码是
  • RTMP:有这样的linux命令行工具吗?

    我到处寻找一个可以让我下载 rtmp 流的 Linux 实用程序 不是 flv 视频而是 MP3 流 我想要下载的流的位置就是这种格式 rtmp live site com loc 45 std fc74a6b7f79c70a5f60 mp
  • 如何在 bazel 中指定 cc_library 的输出工件?

    我想将 foo c 构建为库 然后在生成的 so上执行 readelf 而不是 a 我如何在bazel中编写它 以下 BUILD bazel 文件不起作用 cc library name foo srcs foo c genrule nam
  • 8 拼图有多少种可能的状态?

    经典的 8 块拼图属于滑块家族 我的书 人工智能 一种现代方法 作者 斯图尔特 拉塞尔 Stuart Russell 和彼得 诺维格 Peter Norwig 说 8 个难题9 2可能的状态 但为什么 2 你怎么得到这个 9 是拼图的可能配
  • 从 vb.net 执行 python 脚本

    如何从 VB NET 代码中执行 python 脚本 我想使用 VB NET 为我的 python 脚本构建 GUI 这是为了能够为脚本用户创建 GUI 我找到了这个例子 Shell c Program Files python 266 p
  • Karma 无法加载 webpack

    我收到此错误 16 07 2015 13 03 52 741 WARN preprocess Can not load webpack Error Can not resolve circular dependency Resolving
  • 用于拨打电话的 Web API [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有可以打电话的API进行电话交谈在网络中 也许基于 Flash 例如 Skype 但无需安装软件
  • 在 PHP 中何时使用类与函数

    灯泡还没有亮起来 我真的很喜欢一个易于理解的解释 说明在 php 中使用类比仅使用函数的优势 这是我现在的想法的一个简单例子 我想知道一个类是否更有效 假设我有一个用 php 构建的迷你日历小部件 我正在考虑调用该函数miniCal arr
  • 无法从 WSL2 docker 容器连接到 WSL2 本地主机服务器

    我正在运行一个简单的网络服务器https 0 0 0 0 4000 https 0 0 0 0 4000 也可以作为https local phx cd shoeping at 4000 https local phx cd shoeppi
  • 如何在 AuthenticationTokenCreateContext 中设置错误?

    我必须在 AuthenticationTokenCreateContext 中设置错误 可以使用 context SetError 在 OAuthValidateClientAuthenticationContext 中设置错误 但在 Au
  • 使用 g++ 编译 c++14 代码

    我在 Ubuntu 14 04 LTS 上使用 g 4 8 4 当尝试使用 std c 14 进行编译时 出现以下错误 g error unrecognized command line option std c 14 使用 std c 1
  • 性能监视器 .NET CLR Networking 4.0.0.0 实例命名

    我正在尝试使用性能计数器来确定我的应用程序已发送或接收的字节数 我按照此处找到的建议解决方案进行操作 计算带宽 https stackoverflow com questions 442409 c bandwidth 但我的应用程序实例没有
  • C语言AVL树

    我目前正在做一个需要使用AVL树的项目 我为 avl 编写的插入函数似乎不起作用 它最多适用于 3 或 4 个节点 我将衷心感谢您的帮助 尝试如下 Tree insert Tree t char name 80 int num if t N