新闻中心
c++如何实现一个二叉搜索树_c++ BST数据结构实现方法
二叉搜索树通过类封装实现插入、查找、删除操作,节点结构含值与左右指针,插入按大小规则递归构建,查找依二分逻辑遍历,删除时无子节点直接删、单子节点替换、双子节点找中序后继替代并递归删,示例验证功能正确性。

二叉搜索树(Binary Search Tree, BST)是一种重要的数据结构,它能高效地实现查找、插入和删除操作。在C++中,可以通过类和指针来构建一个完整的BST。下面是一个简洁、实用的C++ BST实现方法。
定义BST节点结构
每个节点包含一个值、指向左子树和右子树的指针。
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
<pre class='brush:php;toolbar:false;'>TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}};
Whimsical
Whimsical推出的AI思维导图工具
182
查看详情
BST类的基本设计
我们创建一个BST类,封装插入、查找、删除等核心操作。
class BST {
private:
TreeNode* root;
<pre class='brush:php;toolbar:false;'>TreeNode* insertNode(TreeNode* node, int val) {
if (!node) {
return new TreeNode(val);
}
if (val < node->val) {
node->left = insertNode(node->left, val);
} else if (val > node->val) {
node->right = insertNode(node->right, val);
}
// 重复值不插入
return node;
}
bool searchNode(TreeNode* node, int val) {
if (!node) return false;
if (node->val == val) return true;
if (val < node->val) {
return searchNode(node->left, val);
} else {
return searchNode(node->right, val);
}
}
TreeNode* deleteNode(TreeNode* node, int val) {
if (!node) return nullptr;
if (val < node->val) {
node->left = deleteNode(node->left, val);
} else if (val > node->val) {
node->right = deleteNode(node->right, val);
} else {
// 找到要删除的节点
if (!node->left) {
TreeNode* temp = node->right;
delete node;
return temp;
} else if (!node->right) {
TreeNode* temp = node->left;
delete node;
return temp;
}
// 有两个子节点:找右子树的最小值(中序后继)
TreeNode* successor = findMin(node->right);
node->val = successor->val;
node->right = deleteNode(node->right, successor->val);
}
return node;
}
TreeNode* findMin(TreeNode* node) {
while (node && node->left) {
node = node->left;
}
return node;
}public: BST() : root(nullptr) {}
void insert(int val) {
root = insertNode(root, val);
}
bool search(int val) {
return searchNode(root, val);
}
void remove(int val) {
root = deleteNode(root, val);
}};
使用示例
下面是一个简单的测试用法:
#include <iostream>
using namespace std;
<p>int main() {
BST tree;
tree.insert(5);
tree.insert(3);
tree.insert(7);
tree.insert(2);
tree.insert(4);</p><pre class='brush:php;toolbar:false;'>cout << "Search 4: " << (tree.search(4) ? "Found" : "Not found") << endl;
cout << "Search 6: " << (tree.search(6) ? "Found" : "Not found") << endl;
tree.remove(3);
cout << "After deleting 3, search 3: "
<< (tree.search(3) ? "Found" : "Not found") << endl;
return 0;}
基本上就这些。这个实现覆盖了BST的核心功能:插入保持有序,查找利用二分逻辑,删除处理三种情况。注意递归写法清晰易懂,适合学习和实际使用。
以上就是c++++如何实现一个二叉搜索树_c++ BST数据结构实现方法的详细内容,更多请关注其它相关文章!
# 是一种
# 电商平台推广营销模式
# 优化关键词的排名方法是
# 长春营销推广哪家强
# 山东网站推广行业
# 崇州集团网站建设
# 网站制作网站建设单位
# 搜狗seo最新算法
# 铜山区seo多少钱
# 舟山产品seo推广
# 网站建设推荐超速云建站
# 相关文章
# 遍历
# node
# 与其他
# 如何使用
# 如何实现
# 是一个
# 子树
# 数据结构
# 递归
# stream
# ios
# c++
# ai
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
Lar*el用户头像管理:实现图片缩放、存储与旧文件安全删除的最佳实践
大象笔记网页版入口 印象笔记网页版登录入口
拷贝漫画电脑版官网入口 拷贝漫画(PC版)在线直达
深入理解Promise链:如何在catch后中断then的执行
Sublime怎么配置Nim语言环境_Sublime Nim代码高亮与补全
CSS布局:解决全屏元素100%尺寸与外边距导致的页面溢出问题
如何在Promise链中有效终止错误处理后的执行
Win11如何使用Windows Sandbox Win11沙盒功能开启与使用教程【详解】
飞书妙记怎样用语音转文字速记_飞书妙记用语音转文字速记【速记方法】
Spring Boot内嵌服务器与J*a EE全栈特性:选择与部署策略
Spring Boot嵌入式服务器与J*a EE:功能支持深度解析
C++如何实现一个智能指针_手动实现C++ shared_ptr的引用计数功能
免费抖音短视频入口_抖音网页版短视频免费通道
AO3最新镜像入口 Archive of Our Own官方平台访问
谷歌浏览器如何快速清除某个网站的数据_Chrome网站缓存清理方法
Pyrogram与g4f集成:异步编程实践与常见错误解决
Angular中父组件异步更新子组件复选框状态的实践指南
蛙漫漫画免费阅读入口_蛙漫官方正版无广告纯净版
Win10怎么制作U盘启动盘 Win10系统安装U盘制作教程【详解】
html怎么在cmd下运行php文件_cmd运行html中php文件方法【教程】
海棠账号登录入口_登录海棠账户同步阅读记录
使用Python高效删除Word宏并转换DOCM为DOCX格式
J*aScript数据结构转换:将对象数组按类别分组
精准捕获:如何在页面中监听除特定元素外的所有点击事件
内存疯狂猛猛涨价:主板销量直接腰斩!
Tailwind CSS line-clamp 布局问题解析与修复指南
Mac怎么查看崩溃日志_Mac控制台错误报告分析
LocoySpider如何部署到云服务器_LocoySpider云部署的远程配置
CSS实现侧边栏导航项全宽圆角悬停背景效果
Golang并发任务中错误如何聚合_Golang goroutine error收集方式
Log4j Console Appender性能瓶颈与高并发优化策略
Linux如何构建多环境配置管理_Linux多环境配置方案
Go语言中Map存储的结构体如何调用指针方法:深入解析与实践
电脑安装程序提示“错误1722”怎么办_Windows Installer服务问题解决【教程】
在J*a中如何开发简易仓库管理与库存统计_仓库管理库存统计项目实战解析
C++编译期如何执行复杂计算_C++模板元编程(TMP)技巧与应用
b站怎么删除评论_b站评论管理与删除操作
AO3官方可用镜像 Archive of Our Own网页版最新入口
电脑IP地址怎么查 查看本机IP地址的几种方法
狙击外星人小游戏开始_狙击外星人小游戏立即开始
EMS快递官网app_中国邮政速递物流手机客户端
J*a TimerTask中HashMap意外清空的深层原因与解决方案
探索高级语言到C/C++的转译路径:以Go为例及内存管理策略
基于动态规划的房屋花卉种植最小成本算法详解
Golang如何使用net/url解析URL_Golang URL解析与处理方法
J*a实现学校排课程序_面向对象结构化项目示例
Win11怎么关闭快速启动_Win11彻底关机设置教程
机器学习中对数变换预测结果的反向还原
黑鲨3Pro怎样在相册开漫画风滤镜_iPhone黑鲨3Pro相册开漫画风滤镜【趣味滤镜】
Python异步编程实践:使用Binance API构建实时交易数据流


2025-11-18
浏览次数:次
返回列表
return temp;
} else if (!node->right) {
TreeNode* temp = node->left;
delete node;
return temp;
}
// 有两个子节点:找右子树的最小值(中序后继)
TreeNode* successor = findMin(node->right);
node->val = successor->val;
node->right = deleteNode(node->right, successor->val);
}
return node;
}
TreeNode* findMin(TreeNode* node) {
while (node && node->left) {
node = node->left;
}
return node;
}