全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C++如何实现一个二叉搜索树?(数据结构代码)

C++实现BST需定义节点结构,支持插入、查找、删除:插入递归比较值并挂载;查找用迭代法O(1)空间;删除分三类——无子节点直接删、单子节点替代、双子节点用右子树最小值替换并递归删该值。

用C++实现二叉搜索树(BST),核心是定义节点结构、支持插入、查找、删除三种基本操作,并保证左子树所有节点值

节点定义与基础结构

每个节点包含数据、左指针、右指针。推荐用指针管理内存,配合构造函数简化初始化:

struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode() : val(0), left(nullptr), right(nullptr) {}
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};

插入操作(递归实现)

从根开始比较:比当前节点小则递归插入左子树,大则插入右子树;遇到空位置就新建节点。

TreeNode* insertIntoBST(TreeNode* root, int val) {
    if (!root) return new TreeNode(val);
    if (val < root->val)
        root->left = insertIntoBST(root->left, val);
    else
        root->right = insertIntoBST(root->right, val);
    return root;
}

查找操作(迭代更简洁)

利用BST性质逐层向下,无需递归,空间复杂度O(1):

TreeNode* searchBST(TreeNode* root, int val) {
    while (root && root->val != val) {
        root = (val < root->val) ? root->left : root->right;
    }
    return root;
}

删除操作(分三类处理)

找到目标节点后:

  • 无子节点:直接删,返回nullptr
  • 仅一个子节点:用子节点替代当前节点
  • 两个子节点:找右子树最小值(或左子树最大值)替换,再递归删除该最小值节点
TreeNode* deleteNode(TreeNode* root, int key) {
    if (!root) return nullptr;
    if (key < root->val)
        root->left = deleteNode(root->left, key);
    else if (key > root->val)
        root->right = deleteNode(root->right, key);
    else {
        if (!root->left) return root->right;
        if (!root->right) return root->left;
        TreeNode* minRight = root->right;
        while (minRight->left) minRight = minRight->left;
        root->val = minRight->val;
        root->right = deleteNode(root->right, minRight->val);
    }
    return root;
}

基本上就这些。注意所有操作都依赖BST的有序性,插入/删除后结构仍保持BST性质。实际使用时建议封装成class,加size、中序遍历等辅助接口会更实用。


# node  # c++  # 封装  # 构造函数  # 递归  # 指针  # 数据结构  # 接口  # class  # 子树  # 最小值  # 三类  # 遍历  # 三种  # 迭代  # struct  # false  # php 


相关文章: 如何在IIS中新建站点并配置端口与IP地址?  专业网站制作服务公司,有哪些网站可以免费发布招聘信息?  婚礼视频制作网站,学习*后期制作的网站有哪些?  javascript中的try catch异常捕获机制用法分析  如何在Golang中引入测试模块_Golang测试包导入与使用实践  外汇网站制作流程,如何在工商银行网站上做外汇买卖?  如何配置WinSCP新建站点的密钥验证步骤?  高端网站建设与定制开发一站式解决方案 中企动力  香港服务器租用每月最低只需15元?  C++如何使用std::optional?(处理可选值)  微信小程序 五星评分(包括半颗星评分)实例代码  如何在自有机房高效搭建专业网站?  如何通过老薛主机一键快速建站?  网站建设设计制作营销公司南阳,如何策划设计和建设网站?  建站之星后台搭建步骤解析:模板选择与产品管理实操指南  图册素材网站设计制作软件,图册的导出方式有几种?  seo网站制作优化,网站SEO优化步骤有哪些?  如何通过远程VPS快速搭建个人网站?  c++怎么用jemalloc c++替换默认内存分配器【性能】  音乐网站服务器如何优化API响应速度?  如何在西部数码注册域名并快速搭建网站?  建站之星如何防范黑客攻击与数据泄露?  教程网站设计制作软件,怎么创建自己的一个网站?  网页设计与网站制作内容,怎样注册网站?  *服务器网站为何频现安全漏洞?  无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?  如何通过商城免费建站系统源码自定义网站主题?  公司网站的制作公司,企业网站制作基本流程有哪些?  制作网站的模板软件,网站怎么建设?  XML的“混合内容”是什么 怎么用DTD或XSD定义  在线教育网站制作平台,山西立德教育官网?  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  如何制作网站标识牌,动态网站如何制作(教程)?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  如何在宝塔面板中修改默认建站目录?  太原网站制作公司有哪些,网约车营运证查询官网?  免费视频制作网站,更新又快又好的免费电影网站?  如何使用Golang安装API文档生成工具_快速生成接口文档  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  上海网站制作开发公司,上海买房比较好的网站有哪些?  长沙做网站要多少钱,长沙国安网络怎么样?  建站之星安装路径如何正确选择及配置?  制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?  制作公司内部网站有哪些,内网如何建网站?  如何选择高效可靠的多用户建站源码资源?  南京网站制作费用,南京远驱官方网站?  Python路径拼接规范_跨平台处理说明【指导】 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。