当前位置: 首页 > 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 的节点。

可视化编译器

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

http://www.lryc.cn/news/453821.html

相关文章:

  • unity ps 2d animation 蛇的制作
  • 39 C 语言枚举类型、枚举常量、枚举变量、枚举的遍历、枚举数组、枚举与 switch
  • LabVIEW程序怎么解决 Bug?
  • AR智能眼镜之战:Meta vs Snap
  • Spring Boot 集成 Flowable UI 实现请假流程 Demo
  • 毕业设计选题:基于ssm+vue+uniapp的医院管理系统小程序
  • 自动驾驶系列—线控悬架技术:自动驾驶背后的动力学掌控者
  • CTF刷题buuctf
  • Qt QWidget控件
  • 如何通过Dockfile更改docker中ubuntu的apt源
  • [C++][第三方库][jsoncpp]详细讲解
  • JavaScript中decodeURIComponent函数的深入解析与应用指南
  • DMA方式为什么无需保护现场
  • 区块链可投会议CCF C--FC 2025 截止10.8 附录用率
  • springboot系列--web相关知识探索四
  • 在PyQt5中,清空一个QFrame中的所有控件
  • SpringBoot实现:校园资料分享平台开发指南
  • Redis篇(缓存机制 - 基本介绍)(持续更新迭代)
  • 引领5G驱动的全球数字营销革新:章鱼移动广告全球平台的崛起
  • 思维链ChatGPT
  • idea中的Java版本运行错误
  • 用HTML5+CSS+JavaScript庆祝国庆
  • 《OpenCV 计算机视觉》—— 视频背景建模
  • 【Mac】和【安卓手机】 通过有线方式实现投屏
  • GitHub flow工作流
  • 【Qt笔记】QFrame控件详解
  • 【二十八】【QT开发应用】模拟WPS Tab
  • PyQt入门指南四 事件处理机制详解
  • 【24最新亲试】ubuntu下载go最新版本
  • InnoDB 事务模型