news 2026/4/25 19:13:30

C++二叉搜索树实现详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++二叉搜索树实现详解

以下是一个简单的二叉搜索树(Binary Search Tree, BST)的 C++ 实现,包含插入、删除、查找和遍历等基本操作:

#include <iostream> using namespace std; // 树节点结构 struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} }; class BST { private: TreeNode* root; // 插入节点(递归辅助函数) TreeNode* insertHelper(TreeNode* node, int val) { if (!node) return new TreeNode(val); if (val < node->val) node->left = insertHelper(node->left, val); else node->right = insertHelper(node->right, val); return node; } // 查找最小节点(用于删除操作) TreeNode* findMin(TreeNode* node) { while (node->left) node = node->left; return node; } // 删除节点(递归辅助函数) TreeNode* deleteHelper(TreeNode* node, int val) { if (!node) return nullptr; if (val < node->val) node->left = deleteHelper(node->left, val); else if (val > node->val) node->right = deleteHelper(node->right, val); else { // 情况1:叶子节点或仅有一个子节点 if (!node->left) return node->right; if (!node->right) return node->left; // 情况2:有两个子节点 TreeNode* successor = findMin(node->right); node->val = successor->val; node->right = deleteHelper(node->right, successor->val); } return node; } // 中序遍历(递归) void inorderHelper(TreeNode* node) { if (!node) return; inorderHelper(node->left); cout << node->val << " "; inorderHelper(node->right); } public: BST() : root(nullptr) {} // 插入操作 void insert(int val) { root = insertHelper(root, val); } // 删除操作 void remove(int val) { root = deleteHelper(root, val); } // 查找操作 bool search(int val) { TreeNode* cur = root; while (cur) { if (val == cur->val) return true; cur = (val < cur->val) ? cur->left : cur->right; } return false; } // 中序遍历 void inorder() { inorderHelper(root); cout << endl; } }; int main() { BST tree; tree.insert(50); tree.insert(30); tree.insert(70); tree.insert(20); tree.insert(40); cout << "中序遍历: "; tree.inorder(); // 输出: 20 30 40 50 70 cout << "查找40: " << (tree.search(40) ? "存在" : "不存在") << endl; cout << "删除30后: "; tree.remove(30); tree.inorder(); // 输出: 20 40 50 70 }

核心操作说明

  1. 插入

    • 递归找到合适位置创建新节点
    • 时间复杂度:$O(h)$($h$为树高度)
  2. 删除

    • 分三种情况处理:
      • 叶子节点:直接删除
      • 单子节点:用子节点替换
      • 双子节点:用后继节点(右子树最小节点)替换
    • 时间复杂度:$O(h)$
  3. 查找

    • 从根节点开始逐层比较
    • 时间复杂度:$O(h)$
  4. 遍历

    • 中序遍历可输出有序序列
    • 时间复杂度:$O(n)$($n$为节点数)

注意:二叉搜索树的性能取决于树的高度$h$。理想情况下$h = \log_2 n$(平衡树),最坏情况下$h = n$(退化为链表)。如需优化可研究平衡二叉搜索树(如 AVL 树、红黑树)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 9:46:45

数字图像处理篇---WebP 格式

&#x1f3af; 一句话总结WebP就是“谷歌出品的全能图像瑞士军刀”&#xff0c;它在保持高质量的同时大幅减小文件体积&#xff0c;还集成了PNG的透明和GIF的动画功能&#xff0c;是现代网页图像的最优选择。&#x1f680; WebP是什么&#xff1f;全称&#xff1a;Web Picture&…

作者头像 李华
网站建设 2026/4/25 5:07:01

数字图像处理篇---图像几何变换

&#x1f3af; 一句话总结图像几何变换就是“给图片做拉伸、旋转、缩放等形状改变的手术”&#xff0c;就像玩橡皮泥一样改变图片的形状和位置&#xff0c;但保持每个点的颜色信息。&#x1f9e9; 什么是几何变换&#xff1f;想象你的照片印在一张有弹性的透明橡胶膜上&#xf…

作者头像 李华
网站建设 2026/4/23 9:48:48

提示工程架构师必备:响应优化的服务降级策略

提示工程架构师必备&#xff1a;服务降级策略实战——让系统在高负载下依然稳如泰山 引言&#xff1a;为什么服务降级是提示工程架构的“保命符”&#xff1f; 想象一下这个场景&#xff1a;你负责的提示工程服务&#xff08;比如AI对话、代码生成&#xff09;正在经历大促峰值…

作者头像 李华
网站建设 2026/4/23 9:49:23

开题报告-基于ssm的图书管理系统的设计与开发

目录 研究背景与意义系统目标技术选型系统功能模块创新点预期成果研究方法 项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作 研究背景与意义 随着信息化技术的发展&#xff0c;传统图书管理方式效率低下且…

作者头像 李华
网站建设 2026/4/23 9:50:07

开题报告-考核管理平台的研究与应用

目录研究背景与意义研究目标关键技术功能模块设计创新点应用价值项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作研究背景与意义 随着企业数字化转型加速&#xff0c;传统人工考核管理效率低、数据分散、透…

作者头像 李华