二叉树插入算法

2023-11-26

我最近完成了我正在从事的一个项目的二叉搜索树的实现。一切都很顺利,我学到了很多东西。然而,现在我需要实现一个常规的二叉树......由于某种原因,这让我感到困惑。

我正在寻找一种方法来执行我的 InsertNode 功能..

通常在 BST 中,您只需检查 data

谁能帮助我实现一个函数,该函数仅以不特定顺序从左到右将新节点添加到二叉树中?

这是我的 BST 插入内容:

void Insert(Node *& root, int data)
{
  if(root == nullptr)
  {
    Node * NN = new Node;
    root = NN;
  }
  else
  {
    if(data < root->data)
    { 
      Insert(root->left, data);
    }
    else
    {
      Insert(root->right, data);
    }
  }
}

我知道这是一个不久前发布的问题,但我仍然想分享我的想法。

我要做的(因为这确实没有很好的记录)是使用广度优先搜索(使用队列)并将子项插入到我遇到的第一个空值中。这将确保您的树在进入另一个级别之前首先填满级别。有了正确数量的节点,它就总是完整的。

我没有太多使用 C++ 的工作,所以为了确保它是正确的,我用 Java 做了它,但你明白了:

public void insert(Node node) {
    if(root == null) {
        root = node;
        return;
    }

    /* insert using Breadth-first-search (queue to the rescue!) */
    Queue<Node> queue = new LinkedList<Node>();
    queue.offer(root);

    while(true) {
        Node n = queue.remove();
        if(!n.visited) System.out.println(n.data);
        n.visited = true;

        if(n.left == null) {
            n.left = node;
            break;
        } else {
            queue.offer(n.left);
        }           

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

二叉树插入算法 的相关文章

  • Dapper 强类型查询返回默认对象值

    刚刚开始使用 Dapper 并喜欢它 我遇到了问题 它返回正确数量的对象 但它们的属性都有默认值 using var dbConnection Connection await dbConnection OpenAsync const st
  • 警告:从指针目标类型中丢弃“const”限定符

    没有const char s意味着 s 是一个指向常量 char 的指针 那么为什么它给我这个警告 我并不是想改变价值观 在第一个函数中警告是return discards const qualifiers from pointer tar
  • C#9 顶级语句文件上的属性

    我正在尝试向顶级语句文件添加属性 但没有找到任何相关信息 是否可以 对于某些上下文 我想仅在该文件中禁用规则 SuppressMessage StyleCop CSharp LayoutRules SA1516 ElementsMustBe
  • .NET Windows 服务中调用 C# 的 wait 的 I/O 回调是否可以不阻塞?

    我知道在 ASP NET 中 当使用 wait 时工作线程会返回到池中 而 I O 发生在后台 这对于可扩展性非常有用 我的 Windows 服务是一个套接字服务器 它使用 Begin End 样式的异步套接字 I O 混合我的魔法 我知道
  • 隐形打开的弹出窗口

    第二天就解决这个问题 要重现 请创建新的 WPF 应用程序 xaml
  • 将占位符文本添加到文本框

    我正在寻找一种将占位符文本添加到文本框的方法 就像在 html5 中使用文本框一样 IE 如果文本框没有文本 则会添加文本Enter some text here 当用户单击它时 占位符文本消失并允许用户输入自己的文本 如果文本框失去焦点并
  • 首先EntityFramework数据库 - 类型映射 - 将binary(8)从SQL映射到C#中的int

    在 SQL 内部 我有一个主键为二进制 8 的表 当我使用该表添加到我的模型中时Update Model from Database我可以看到该列有 type Binary 在 C 中 我将该列设为byte 我可以将该列映射到 int 吗
  • Type_traits *_v 变量模板实用程序顺序无法编译

    看过了这个答案 https stackoverflow com a 31763111 7151494 我试图想出一个变量模板从中获取代码的实用程序 template
  • 基于 C++ 范围的 for 循环

    尝试使用基于范围的 for 循环执行某些操作 可以使用常规的 for 循环来完成 如下所示 vector
  • 在 C# 中生成随机值

    如何使用以下命令生成随机 Int64 和 UInt64 值RandomC 中的类 这应该可以解决问题 这是一个扩展方法 因此您可以像调用普通方法一样调用它Next or NextDouble上的方法Random目的 public stati
  • AspNetCore.SignalR:无法启动未处于初始状态的连接

    我无法让 ASP NET Core SignalR 应用程序正常运行 我有这个服务器端代码 public class PopcornHub Hub private int Users public async Task BroadcastN
  • 从存储过程返回 int 值并在 ASP.NET 代码中检查它以验证登录表单

    当我多次尝试但没有得到有效结果时 使此代码运行的真实顺序是什么 SQL存储过程的代码 set ANSI NULLS ON set QUOTED IDENTIFIER ON GO ALTER PROC dbo login proc usern
  • 打破条件变量死锁

    我遇到这样的情况 线程 1 正在等待条件变量 A 该变量应该由线程 2 唤醒 现在线程 2 正在等待条件变量 B 该变量应该由线程 1 唤醒 在我使用的场景中条件变量 我无法避免这样的死锁情况 我检测到循环 死锁 并终止死锁参与者的线程之一
  • IEnumerable.比带中断的 for 循环更快吗?

    我们的代码打开表单时遇到了一些缓慢的情况 这可能是由于for循环与break这需要很长时间才能执行 我把它切换到IEnumerable Any 并看到表格很快打开 我现在试图弄清楚是否单独进行此更改会提高性能 或者是否正在访问Product
  • 为什么我的 ITexthandler 不工作?我正在尝试将 XML 解析为 ITextSharp 文档

    我正在使用 Visual Developer 2010 MVC 3 c 我正在尝试将 XML 解析为 iTextSharp 文档 如下所示 ITextHandler textHandler new ITextHandler doc text
  • fscanf 和 EOF 中的否定扫描集

    我的文件中有一个以逗号分隔的字符串列表 姓名 1 姓名 2 姓名 3 我想跳过所有逗号来阅读这些名字 我写了以下循环 while true if fscanf file my string 1 break 然而 它总是比预期多执行一次 给定
  • 如何使用eclipse构建C++应用程序

    我已经从以下位置下载了 Eclipse Juno for C here http www eclipse org downloads download php file technology epp downloads release ju
  • 停止 TcpListener 的正确方法

    我目前正在使用 TcpListener 来处理传入连接 每个连接都有一个线程用于处理通信 然后关闭该单个连接 代码如下 TcpListener listener new TcpListener IPAddress Any Port Syst
  • 如何在Linux上构建GLFW3项目?

    我已经使用 cmake 和 make 编译了 glfw3 和包含的示例 没有出现任何问题 开始编写我的第一个项目 作为 opengl 和 glfw 的新手 并且对 C 和 CMake 没有经验 我正在努力理解示例构建文件 甚至要链接哪些库和
  • 统一;随机物体移动[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在制作一款机器人战斗游戏 我希望敌人随机移动 然后有时会向敌人移动 我希望运动包含在其中的代码 else if avoid fal

随机推荐

  • 通过 jQuery 将 HTML 表数据放入数组中

    我想从 html 表中提取数据 例如 table tr th Header1 th th Header2 th th Header3 th tr tr td Value 1 1 td td Value 2 1 td td Value 3 1
  • 授权请求标头与凭据的 POST 请求正文

    将用户凭据从前端发送到后端服务器的正确方法是什么 我看到一些示例 其中一些开发人员使用授权标头 一些开发人员在 POST 正文中传递凭据 尝试登录时 凭据通常会转到请求正文一次 您应该收到一个令牌作为回报 尽管您是否通过 HTTP 标头 请
  • 如何使用Javascript读取get请求?

    所以我有一个名为的 html 页面A html它是这样称呼的B html A html varString bla bla bla 向 JS 发送 args 是否正确 如何解析JS中的args 不使用Jquery等任何框架 在IE6 Fir
  • 如何使用 JDBC 和 HSQLDB 检索以前自动生成的 PK ID 值

    我正在使用 JDBC 和 HSQLDB 2 2 9 将新行插入数据库并随后保留其行的最有效和准确的方法是什么id PK 设置为自动增量 值 我需要这样做的原因可能非常明显 但我将用一个示例进行说明以供讨论 说有一个Customer表有一个P
  • 如果有人在我的浏览器中禁用了cookie,我该如何在java中进行会话?

    我想知道如果有人禁用了我的浏览器中的 cookie 那么 cookie 不适用于我的浏览器 那么我如何在 java 中进行会话 我正在为服务器端编程编写 servlet 那么我的会话如何进行 它如何识别用户 由于 JSESSION ID 存
  • 如何从 Apache Spark 中的数据帧中选择相同大小的分层样本?

    我在 Spark 2 中有一个数据框 如下所示 其中用户有 50 到数千个帖子 我想创建一个新的数据框 其中包含原始数据框中的所有用户 但每个用户只有 5 个随机抽样的帖子 user id post id text 67778705 447
  • 将文本附加到富文本框中的开头

    private void button1 Click object sender EventArgs e richTextBox1 AppendText r n richTextBox1 Focus string s Enter richT
  • 如何在R中生成具有指定对数正态分布的随机数?

    我想从对数正态分布中随机生成 20 个数字 几何平均值为 10 几何标准差为 2 5 我应该使用哪个 R 函数来完成此任务 The rlnorm功能 rlnorm 20 log 10 log 2 5 R 中更一般的分布通常可用于d 强度 p
  • 动态添加删除线性布局的控件

    我有 3 个布局 当单击按钮访问某些布局时 我需要删除其中的控件 并且知道如何实现该布局 这是我使用的代码
  • git bare 存储库、工作树和跟踪分支

    我正在使用一个代码库 在该代码库中我需要出于不同的目的同时处理多个分支 因此 我克隆到一个裸存储库 然后设置一些工作树 git clone bare ssh email protected project repo repo git cd
  • 无法从 Google Cloud Function 访问存储在 Secrets Manager 中的密钥

    在测试我编写的尝试访问存储在 Secret Manager 中的密钥的 Google Cloud Function 时 出现以下错误 Error 7 PERMISSION DENIED Permission secretmanager ve
  • Swift 1.2 中的神秘崩溃 - 仅在发布版本中

    更新到 Xcode 6 3 beta 1 和 Swift 1 2 后 我的所有应用程序都神秘崩溃仅在发布版本中 在更新我的 Swift 1 2 代码后 它们在调试版本中工作正常 调试器没有任何感觉where崩溃正在发生 但原因尚不清楚 一些
  • jQuery点击表格单元格事件

    我有一个如下所示的html代码 tbody tr td class name Joe td td class surname White td td class age 25 td tr tbody 并且有这样的 jQuery 代码 tr
  • 有没有更好的方法用 Python 编写这个 URL 操作?

    我很好奇是否有一种更简单的方法可以从 url 中删除特定参数 我想出的是以下内容 这似乎有点冗长 使用的库或者更Pythonic的版本值得赞赏 parsed urlparse url if parsed query params dict
  • Docker - 如何将文件从映像复制到主机?

    我的问题与这个问题将文件从容器复制到主机 我有一个 Dockerfile 它可以获取依赖项 从源代码编译构建工件并运行可执行文件 我还想复制构建工件 在我的例子中它是 zip由 生产sbt dist在 target 中 但我认为这个问题也适
  • 如何进行视野自动对焦?

    当用户打开页面时 我需要聚焦该字段 我不知道它是否会改变任何东西 但它位于我从 PHP 文件加载的模式窗口内 有简单的方法吗 使用 JavaScript 您可以实现此目的 document onload function document
  • 使用 Jasmine 在 JavaScript 中存根 WebSocket

    我尝试测试是否onmessage是一个适当的函数 这是一个测试 describe init address window function beforeEach function address ws test address window
  • MigLayout 推送 VS 增长

    这两个约束有什么区别 从文档中 PUSH 使组件所在的行和 或列随着 权重 而增长 GROW 设置组件相对于同一单元中的其他组件的增长程度 那么 主要的想法是缩小组件内部和外部的尺寸 重要的是要明白fill 列 行 grow push协同工
  • 当未指定默认命名空间时,函数 getMessageData 必须使用前缀[重复]

    这个问题在这里已经有答案了 我收到这个错误 WEB INF jsp account index jsp 6 0 函数 getMessageData 必须 当未指定默认名称空间时与前缀一起使用
  • 二叉树插入算法

    我最近完成了我正在从事的一个项目的二叉搜索树的实现 一切都很顺利 我学到了很多东西 然而 现在我需要实现一个常规的二叉树 由于某种原因 这让我感到困惑 我正在寻找一种方法来执行我的 InsertNode 功能 通常在 BST 中 您只需检查