当前位置: 首页 > news >正文

二叉搜索树 (BST) 节点插入、查找、删除、获取最大值、最小值和中序遍历排序等功能

二叉搜索树 (BST) 实现总结

本程序实现了一个简单的二叉搜索树 (BST),支持节点插入、查找、删除、获取最大值、最小值和中序遍历排序等功能。以下是各部分的详细说明。

数据结构

节点定义

struct BinTreeNode {int data;                       // 节点存储的数据struct BinTreeNode* left;      // 指向左子节点的指针struct BinTreeNode* right;     // 指向右子节点的指针
};

函数定义

插入函数

void insert(BinTreeNode* &t, int x);
  • 功能: 将新值 x 插入到二叉搜索树中。
  • 逻辑:
    • 如果当前节点 tNULL,则创建新节点并赋值。
    • 否则根据 xt->data 的比较,递归地决定插入左子树或右子树。

查找最小值和最大值

int Min(BinTreeNode* bst);
int Max(BinTreeNode* bst);
  • 功能: 返回二叉搜索树中最小值和最大值。
  • 逻辑:
    • 最小值通过一直遍历左子树获取。
    • 最大值通过一直遍历右子树获取。

中序遍历排序

void sort(BinTreeNode* t);
  • 功能: 打印二叉搜索树的节点值,按升序排列。
  • 逻辑:
    • 递归访问左子树,打印当前节点,再递归访问右子树。

查询 BST

BinTreeNode* searchBST(BinTreeNode* t, int key);
  • 功能: 查询树中是否存在值为 key 的节点。
  • 逻辑:
    • 根据 key 的值与当前节点的比较,决定递归访问左子树或右子树。

删除节点

bool removeBST(BinTreeNode* t, int x);
  • 功能: 删除值为 x 的节点。
  • 逻辑:
    • 递归查找节点 t
    • 一旦找到,判断其子节点情况并处理:
      • 叶子节点: 直接释放。
      • 单子节点: 将当前节点替换为其唯一的子节点并释放。
      • 双子节点: 找到左子树的最大值,替换当前节点数据,并删除该最大节点。

主函数

int main() {int ar[] = {53, 17, 78, 9, 45, 65, 87, 23};int n = sizeof(ar) / sizeof(ar[0]);BinTreeNode* bst = NULL;for (int i = 0; i < n; i++) {insert(bst, ar[i]);  // 插入数组中的每个元素}removeBST(bst, 53); // 删除值为 53 的节点return 0;
}
  • 功能: 创建一个二叉搜索树并插入一组数据,然后删除指定节点。
  • 逻辑:
    • 使用数组 ar 初始化树,插入每个元素。
    • 调用 removeBST 删除值为 53 的节点。

可视化编译器

可视化编辑器 数据结构与算法 | 图码

相关文章:

二叉搜索树 (BST) 节点插入、查找、删除、获取最大值、最小值和中序遍历排序等功能

二叉搜索树 (BST) 实现总结 本程序实现了一个简单的二叉搜索树 (BST)&#xff0c;支持节点插入、查找、删除、获取最大值、最小值和中序遍历排序等功能。以下是各部分的详细说明。 数据结构 节点定义 struct BinTreeNode {int data; // 节点存储的数…...

unity ps 2d animation 蛇的制作

一、PS的使用 1.打开PS 利用钢笔工具从下往上勾勒填充 2.复制图层&#xff0c;Ctrl T,w调为-100% 3.对齐图层并继续用钢笔工具进行三角勾勒 3.画眼睛,按U快捷键打开椭圆工具&#xff0c;按住Shift可以画圆&#xff0c;填充并复制图层对称。 4.画笔工具&#xff0c;打开小…...

39 C 语言枚举类型、枚举常量、枚举变量、枚举的遍历、枚举数组、枚举与 switch

目录 1 什么是枚举 2 定义枚举类型 2.1 语法格式 2.2 枚举元素的特点 2.3 案例演示 3 枚举变量 3.1 什么是枚举变量 3.2 定义枚举变量的多种方式 3.3 案例演示 1&#xff1a;标准版枚举类型 3.4 案例演示 2&#xff1a;简化版枚举类型 3.5 案例演示 3&#xff1a;匿…...

LabVIEW程序怎么解决 Bug?

在LabVIEW开发过程中&#xff0c;发现和解决程序中的Bug是确保系统稳定运行的关键环节。由于LabVIEW采用图形化编程方式&#xff0c;Bug的排查和处理与传统编程语言略有不同。以下是解决LabVIEW程序中Bug的常见方法和技巧&#xff0c;涵盖从问题发现到解决的多个步骤和角度&…...

AR智能眼镜之战:Meta vs Snap

随着增强现实(AR)技术的发展,各大科技公司都在争夺下一代计算平台的领先地位。Meta(前身为Facebook)和Snap作为其中的两个重要玩家,正在竞相开发能够提供沉浸式体验的AR智能眼镜。在这篇文章中,我们将深入探讨这两家公司可能采用的显示技术和用户体验,并分析它们各自的…...

Spring Boot 集成 Flowable UI 实现请假流程 Demo

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 在现代企业应用中&#xff0c;工作流管理是一个至关重要的部分。通过使用Spring Boot和Flowable&#xff0c;可以方便地构建和管理工作流。本文将详细介绍如何在Spring Boot项目中集成Flowable UI&#xff0c…...

毕业设计选题:基于ssm+vue+uniapp的医院管理系统小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…...

自动驾驶系列—线控悬架技术:自动驾驶背后的动力学掌控者

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…...

CTF刷题buuctf

[WUSTCTF2020]颜值成绩查询 拿到相关题目&#xff0c;其实根据功能和参数分析。需要传入一个学号然后进行针对于对应的学号进行一个查询&#xff0c;很可能就会存在sql注入。 其实这道题最难的点&#xff0c;在于过滤了空格&#xff0c;因此我们使用 /**/来过滤空格的限制。…...

Qt QWidget控件

目录 一、概述 二、Qwidget常用属性及函数介绍 2.1 enable 2.2 geometry 2.3 windowTitle 2.4 windowIcon 2.5 cursor 2.6 font 设置字体样式 2.7 toolTip 2.8 focusPolicy焦点策略 2.9 styleSheet 一、概述 widget翻译而来就是小控件&#xff0c;小部件。…...

如何通过Dockfile更改docker中ubuntu的apt源

首先明确我们有一个宿主机和一个docker环境&#xff0c;接下来的步骤是基于他们两个完成的 1.在宿主机上创建Dockerfile 随便将后面创建的Dockerfile放在一个位置,我这里选择的是 /Desktop 使用vim前默认你已经安装好了vim 2.在输入命令“vim Dockerfile”之后&#xff0c;…...

[C++][第三方库][jsoncpp]详细讲解

目录 1.介绍2.jsoncpp3.使用1.main.cc2.序列化3.反序列化 1.介绍 json是一种数据交换格式&#xff0c;采用完全独立于编程语言的文本格式来存储和表示数据json数据类型&#xff1a;对象、数组、字符串、数字 对象&#xff1a;使用{}括起来的表示一个对象数组&#xff1a;使用[…...

JavaScript中decodeURIComponent函数的深入解析与应用指南

在Web开发中&#xff0c;经常需要对URI&#xff08;统一资源标识符&#xff09;进行编码和解码&#xff0c;以保证数据传输的准确性和可靠性。decodeURIComponent函数是JavaScript中用于解码由encodeURIComponent函数或其他类似方法编码的部分统一资源标识符&#xff08;URI&am…...

DMA方式为什么无需保护现场

DMA&#xff08;Direct Memory Access&#xff09;方式无需保护现场的原因主要与其工作原理和硬件设计有关。以下是对这一问题的详细解释&#xff1a; DMA工作原理 DMA是一种通过硬件直接在内存和外设之间传输数据的技术&#xff0c;无需CPU的介入。在DMA传输过程中&#xff…...

区块链可投会议CCF C--FC 2025 截止10.8 附录用率

Conference&#xff1a;Financial Cryptography and Data Security (FC) CCF level&#xff1a;CCF C Categories&#xff1a;network and information security Year&#xff1a;2025 Conference time&#xff1a;14–18 April 2025, Miyakojima, Japan 录用率&#xff1…...

springboot系列--web相关知识探索四

一、前言 web相关知识探索三中研究了请求中所带的参数是如何映射到接口参数中的&#xff0c;也即请求参数如何与接口参数绑定。主要有四种、分别是注解方式、Servlet API方式、复杂参数、以及自定义对象参数。web相关知识探索三中主要研究了注解方式以及Servlet API方式。本次…...

在PyQt5中,清空一个QFrame中的所有控件

在PyQt5中&#xff0c;如果你想要清空一个QFrame中的所有控件&#xff0c;你需要遍历该QFrame的布局&#xff08;假设你已经在其中添加了一个布局&#xff0c;比如QVBoxLayout或QHBoxLayout&#xff09;&#xff0c;并从布局中移除所有的控件。由于直接从布局中移除控件并不会立…...

SpringBoot实现:校园资料分享平台开发指南

1系统概述 1.1 研究背景 如今互联网高速发展&#xff0c;网络遍布全球&#xff0c;通过互联网发布的消息能快而方便的传播到世界每个角落&#xff0c;并且互联网上能传播的信息也很广&#xff0c;比如文字、图片、声音、视频等。从而&#xff0c;这种种好处使得互联网成了信息传…...

Redis篇(缓存机制 - 基本介绍)(持续更新迭代)

目录 一、缓存介绍 二、经典三缓存问题 1. 缓存穿透 1.1. 简介 1.2. 解决方案 1.3. 总结 2. 缓存雪崩 2.1. 简介 2.2. 解决方案 2.3. 总结 3. 缓存击穿 3.1. 简介 3.2. 解决方案 3.3. 总结 4. 经典三缓存问题出现的根本原因 三、常见双缓存方案 1. 缓存预热 1…...

引领5G驱动的全球数字营销革新:章鱼移动广告全球平台的崛起

引领5G驱动的全球数字营销革新&#xff1a;章鱼移动广告全球平台的崛起 作为章鱼移动广告平台的营销战略顾问&#xff0c;黄珍珍通过她在市场营销、品牌推广、技术整合等多方面的丰富经验&#xff0c;成功推动了这一平台在全球广告市场的崛起。她不仅为平台的国际化扩展奠定了基…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

Linux部署私有文件管理系统MinIO

最近需要用到一个文件管理服务&#xff0c;但是又不想花钱&#xff0c;所以就想着自己搭建一个&#xff0c;刚好我们用的一个开源框架已经集成了MinIO&#xff0c;所以就选了这个 我这边对文件服务性能要求不是太高&#xff0c;单机版就可以 安装非常简单&#xff0c;几个命令就…...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明&#xff0c;此教程是针对Simulink编译模型并导入Veristand中编写的&#xff0c;同时需要注意的是老用户编译可能用的是Veristand Model Framework&#xff0c;那个是历史版本&#xff0c;且NI不会再维护&#xff0c;新版本编译支持为VeriStand Model Generation Suppo…...