二叉搜索树(BST)
1、什么是BST(Binary Search Tree)二叉搜索树也叫二叉搜索树或二叉排序树其核心的递归性质如下对于树中任意一个节点该节点左子树中所有节点的值 当前节点值该节点右子树中所有节点的值 当前节点值左、右子树本身也必须是二叉搜索树一般BST不允许重复关键字如果有需要应当添加约定将重复值统一 放在左子树 / 右子树中。2、BST的具体实现依据BST的性质我们可以构建一个BST并实现一些常用的基础操作· 节点定义#include stdio.h #include stdlib.h typedef struct bstNode { int val; struct bstNode* left; struct bstNode* right; }bstNode;· 创建节点并插入bstNode* create_bstNode(int val) { bstNode* node malloc(sizeof(bstNode)); if (!node) { perror(malloc); exit(EXIT_FAILURE); } node-val val; node-left NULL; node-right NULL; return node; } bstNode* bstInsert(bstNode *root,int val) { if (!root) return create_bstNode(val); //如果当前节点为空则直接插入 if (val root-val) root-left bstInsert(root-left, val); //若val小于节点值则在节点的左子树中插入 else if (val root-val) root-right bstInsert(root-right, val); //若val大于节点值则在节点的右子树中插入 /* 相等则不插入 */ return root; }· 注这里插入一下perror的头文件与原型为#include stdio.h void perror(const char *s);其作用是打印自定义字符串s再紧跟一个冒号并自动读取全局变量errno系统最近一次调用出错的错误码将错误码翻译成对应的文字错误描述一并输出到标准错误 (stderr)。exit的头文件与原型为#include stdlib.h void exit(int status);exit的核心作用是终止整个当前进程退出程序。exit(0)表示程序正常结束exit(非0)则表明程序异常退出用来告知系统出错类型。stdlib.h中还声明了#define EXIT_SUCCESS 0 #define EXIT_FAILURE 1· 删除节点bstNode* findMIN(bstNode* root) //找到最小值 { while (root-left) root root-left; return root; } bstNode* bstDelete(bstNode *root,int val) { if (!root) return NULL; if (val root-val) root-left bstDelete(root-left, val); else if (val root-val) root-right bstDelete(root-right, val); else { /* S1叶子节点 */ if (!root-left !root-right) { free(root); return NULL; } /* S2只有右孩子 */ if (!root-left) { bstNode* tmp root-right; free(root); return tmp; } /* S3只有左孩子 */ if (!root-right) { bstNode* tmp root-left; free(root); return tmp; } /* S4左右孩子都有 */ bstNode* tmp findMIN(root-right); root-val tmp-val; root-right bstDelete(root-right, tmp-val); } return root; }· findMIN根据BST的性质找最小值只需要一直找到最左侧的叶子节点即可。· bstDeleteBST的删除会稍微复杂一些下面梳理一下我个人的想法。函数bstDelete可以描述为“永远返回当前递归所处理的这颗子树的新根”。在递归过程中只有找到被删除值的那层递归会直接执行删除操作其余递归层则会根据子树的新的根节点更新自己的左 / 右孩子指针并返回自身作为当前子树的新根。因此在main中调用时会写成root bstDelete(root val);S1——待删除节点是叶子节点叶子那一层返回了NULL表示这棵叶子子树不存在了父节点把对应的孩子指针置为NULL随后父节点返回自己这时更高层次的结构不会发生变化。S2、S3——待删除节点只有一个子节点 / 子树释放当前节点并返回其唯一的子节点作为当前子树的新根。S4——待删除节点有两个子节点 / 子树通过findMIN(root-right)找到当前节点右子树的最小值即当前节点的中序后继节点用后继节点的值覆盖当前节点然后在当前节点的右子树中递归删除后继节点而由于后继节点一定没有左孩子因此此次删除必定退化为S1或S2。· 查找节点bstNode* bstSearch(bstNode* root, int val) { if (!root) return NULL; if (root-val val) return root; if (val root-val) return bstSearch(root-left, val); return bstSearch(root-right, val); }该函数的返回结果是待查值val的节点。· 中序遍历void Inorder(bstNode* root) { if (!root) return; Inorder(root-left); printf(%d ,root-val); Inorder(root-right); }作为一颗BST其中序遍历一定是升序的在测试时也可根据此判断构建的BST是否正确。· 删除整棵树void bstFree(bstNode *root) { if (!root) return; bstFree(root-left); bstFree(root-right); free(root); //注意要先free孩子节点再free父节点 }

相关新闻

AI视频生成技术:扣子平台Seedance 2.0全解析

AI视频生成技术:扣子平台Seedance 2.0全解析

1. 项目概述:AI视频生成技术革新 最近测试了扣子平台的Seedance 2.0视频生成功能,这个多模态AI模型确实带来了不少惊喜。作为字节跳动旗下的一站式AI开发平台,扣子(Coze)整合了从脚本创作到视频输出的全流程工具链&…

2026/7/23 12:23:27阅读更多 →
销量预测中的间歇性需求:从理论到两阶段XGBoost实战

销量预测中的间歇性需求:从理论到两阶段XGBoost实战

80%的SKU日销量经常为零,这就是你的模型总在长尾商品上失效的根本原因。本文深入拆解间歇性需求的数学本质,并给出两阶段XGBoost的完整实现——这是我见过处理长尾问题最有效的实用方案。 一、什么是间歇性需求?为什么它如此棘手?…

2026/7/23 12:23:27阅读更多 →
TPS62136电源设计实战:电感电容选型与外围电路设计详解

TPS62136电源设计实战:电感电容选型与外围电路设计详解

1. 项目概述:从芯片手册到可靠电路做硬件设计,尤其是电源部分,最怕的就是“知其然不知其所以然”。芯片手册(Datasheet)和设计指南(Design Guide)里公式、图表、推荐电路一大堆,但真…

2026/7/23 12:21:26阅读更多 →
2026年无线投屏器怎么选?这篇深度评测告诉你

2026年无线投屏器怎么选?这篇深度评测告诉你

2026年,无线投屏器已经成为企业会议室、教育机构、家庭娱乐的标配设备。打开电商平台搜索“无线投屏器”,市面上的产品五花八门,从99元到5000元不等,到底应该怎么选?什么品牌值得信赖? 带着这些问题&#x…

2026/7/23 13:37:51阅读更多 →
Unity智能NPC开发:基于ML-Agents与MCP的分层决策架构实践

Unity智能NPC开发:基于ML-Agents与MCP的分层决策架构实践

1. 项目概述:从“调参地狱”到“智能涌现”如果你在Unity里做过稍微复杂一点的NPC行为,大概率经历过“调参地狱”。我说的不是简单的“靠近玩家就攻击”这种状态机逻辑,而是那种需要动态决策、适应环境、甚至能“学习”玩家套路的智能体。传统…

2026/7/23 13:37:51阅读更多 →
Qwen3.5架构演进与舆情分析实践

Qwen3.5架构演进与舆情分析实践

1. Qwen3到Qwen3.5架构演进概述去年第一次接触Qwen3架构时,最让我印象深刻的是其创新的混合注意力机制设计。如今Qwen3.5的发布,在保持核心优势的基础上进行了多项关键改进。从工程实践角度看,这次升级主要围绕三个方向:计算效率优…

2026/7/23 13:37:51阅读更多 →
智能快寄柜系统-物品寄存任务工单 五日工作计划

智能快寄柜系统-物品寄存任务工单 五日工作计划

一、工单基本信息项目名称智能快寄柜系统工单编号全栈开发-智能快寄柜系统-物品寄存任务工单创建时间2026-01创建人邹世军开发方向全栈开发 GO 方向原型地址https://modao.cc/proto/3fxWzFGJsp37iiCk5fS2h/sharing?view_moderead_only原工时预估3 人日任务优先级中二、任务概述…

2026/7/23 13:37:51阅读更多 →
AI Agent 入门

AI Agent 入门

🚀 AI Agent 入门指南 AI Agent(人工智能体)是当前 AI 领域最热门的方向之一,被视为大模型从"对话工具"走向"自主执行"的关键形态。下面为你系统梳理入门路径。 什么是 AI Agent? 简单来说&#x…

2026/7/23 13:37:51阅读更多 →
基于Transformer的多组学数据整合与疾病预测系统

基于Transformer的多组学数据整合与疾病预测系统

1. 项目背景与核心价值多组学数据整合与疾病预测是当前生物医学研究的重点方向。传统方法在处理基因组、转录组、蛋白质组等多维度数据时面临两大挑战:一是不同组学数据间的异质性问题,二是海量数据下的特征提取效率低下。大模型技术的出现为解决这些问题…

2026/7/23 13:35:50阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/23 0:56:31阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/23 0:56:31阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 0:56:31阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:00:28阅读更多 →
从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:28阅读更多 →
油泥处理设备哪里能买到

油泥处理设备哪里能买到

油泥处理设备哪里有?这是许多从事油田、炼化、清罐业务的从业者最关心的问题。根据河南三丰环保设备有限公司的行业经验,选购油泥处理设备的核心在于设备能否适配当地环保法规与原料特性,而非单纯看价格。该公司总经理王钦田先生指出&#xf…

2026/7/23 0:00:28阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/22 22:56:18阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/22 18:55:50阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/22 18:55:50阅读更多 →