news 2026/5/1 4:35:10

二叉搜索树

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
二叉搜索树
1.⼆叉搜索树的概念
⼆叉搜索树⼜称⼆叉排序树,它或者是⼀棵空树,或者是具有以下性质的⼆叉树:
若它的左⼦树不为空,则左⼦树上所有结点的值都⼩于等于根结点的值
若它的右⼦树不为空,则右⼦树上所有结点的值都⼤于等于根结点的值
它的左右⼦树也分别为⼆叉搜索树
2.二叉搜索树的模拟实现:
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string.h> using namespace std; template<class K, class V> struct BSTreeNode { K _key; V _value; BSTreeNode<K, V>* _left; BSTreeNode<K, V>* _right; BSTreeNode(const K& key, const V& value) :_key(key) , _value(value) , _left(nullptr) , _right(nullptr) {} }; template<class K, class V> class BSTree { typedef BSTreeNode<K, V> Node; public: bool Insert(const K& key, const V& value) { if (_root == nullptr) { _root =new Node(key, value); return true; } Node* parent = nullptr; Node* cur = _root; while (cur) { if (cur->_key < key) { parent = cur; cur = cur->_right; } else if (cur->_key > key) { parent = cur; cur = cur->_left; } else { return false; } } cur = new Node(key, value); if (parent->_key < key) { parent->_right = cur; } else { parent->_left = cur; } return true; } Node* Find(const K& key) { Node* cur = _root; while (cur) { if (cur->_key < key) { cur = cur->_right; } else if (cur->_key > key) { cur = cur->_left; } else { return cur; } } return nullptr; } bool Erase(const K& key) { Node* parent = nullptr; Node* cur = _root; while (cur) { if (cur->_key < key) { parent = cur; cur = cur->_right; } else if (cur->_key > key) { parent = cur; cur = cur->_left; } else { // 删除 // 左为空 if (cur->_left == nullptr) { if (cur == _root) { _root = cur->_right; } else { if (parent->_left == cur) { parent->_left = cur->_right; } else { parent->_right = cur->_right; } } delete cur; } else if (cur->_right == nullptr) { if (cur == _root) { _root = cur->_left; } else { // 右为空 if (parent->_left == cur) { parent->_left = cur->_left; } else { parent->_right = cur->_left; } } delete cur; } else { // 左右都不为空 // 右子树最左节点 Node* replaceParent = cur; Node* replace = cur->_right; while (replace->_left) { replaceParent = replace; replace = replace->_left; } cur->_key = replace->_key; if (replaceParent->_left == replace) replaceParent->_left = replace->_right; else replaceParent->_right = replace->_right; delete replace; } return true; } } return false; } void InOrder() { _InOrder(_root); cout << endl; } private: void _InOrder(Node* root) { if (root == nullptr) { return; } _InOrder(root->_left); cout << root->_key << ":" << root->_value << endl; _InOrder(root->_right); } private: Node* _root = nullptr; }; void TestBSTree() { /*BSTree<string, string> dict; dict.Insert("insert", "插入"); dict.Insert("erase", "删除"); dict.Insert("left", "左边"); dict.Insert("string", "字符串"); string str; while (cin >> str) { auto ret = dict.Find(str); if (ret) { cout << str << ":" << ret->_value << endl; } else { cout << "单词拼写错误" << endl; } }*/ string strs[] = { "苹果", "西瓜", "苹果", "樱桃", "苹果", "樱桃", "苹果", "樱桃", "苹果" }; // 统计水果出现的次 BSTree<string, int> countTree; for (auto str : strs) { auto ret = countTree.Find(str); if (ret == NULL) { countTree.Insert(str, 1); } else { ret->_value++; } } countTree.InOrder(); } int main() { TestBSTree(); return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 22:08:29

Whisper Large v3 GPU监控:nvidia-smi使用详解

Whisper Large v3 GPU监控&#xff1a;nvidia-smi使用详解 1. 引言 1.1 业务场景描述 在部署基于 OpenAI Whisper Large v3 的多语言语音识别 Web 服务时&#xff0c;GPU 资源的高效利用和实时监控是保障系统稳定运行的关键。Whisper Large v3 模型参数量高达 1.5B&#xff…

作者头像 李华
网站建设 2026/4/26 5:32:29

ms-swift+LoRA实战:没显卡也能微调大模型

ms-swiftLoRA实战&#xff1a;没显卡也能微调大模型 你是不是也遇到过这种情况&#xff1a;看到一篇论文里用LoRA微调大模型效果惊艳&#xff0c;自己也想动手复现&#xff0c;结果刚一运行就提示“CUDA out of memory”&#xff1f;明明只是想做个小实验&#xff0c;可本地4G…

作者头像 李华
网站建设 2026/4/30 22:20:15

函数调用ABI对比:arm64和x64从零实现示例

深入函数调用的底层&#xff1a;arm64 与 x64 ABI 实战解析你有没有遇到过这样的场景&#xff1f;一段 C 函数在 arm64 上运行正常&#xff0c;移植到 x64 却莫名其妙崩溃&#xff1b;或者调试时发现寄存器里的值完全不是预期的参数——这些问题的背后&#xff0c;往往藏着一个…

作者头像 李华
网站建设 2026/4/24 19:06:54

CV-UNet部署指南:安全防护最佳实践

CV-UNet部署指南&#xff1a;安全防护最佳实践 1. 引言 随着图像处理技术的快速发展&#xff0c;基于深度学习的智能抠图方案在电商、设计、内容创作等领域广泛应用。CV-UNet Universal Matting 是一款基于 UNET 架构实现的通用图像抠图工具&#xff0c;支持一键式单图与批量…

作者头像 李华
网站建设 2026/4/25 12:22:53

手把手教你用elasticsearch可视化工具搭建监控仪表盘

从零搭建企业级监控仪表盘&#xff1a;Elasticsearch Kibana 实战指南你有没有遇到过这样的场景&#xff1f;系统突然变慢&#xff0c;用户投诉激增&#xff0c;但翻遍日志却找不到头绪&#xff1b;线上服务报错&#xff0c;只知道“出问题了”&#xff0c;却无法快速定位是哪…

作者头像 李华
网站建设 2026/4/16 7:36:05

热词识别准确率飙升!Seaco-Paraformer实战技巧分享

热词识别准确率飙升&#xff01;Seaco-Paraformer实战技巧分享 1. 引言&#xff1a;提升中文语音识别精度的现实挑战 在当前智能语音应用广泛落地的背景下&#xff0c;通用语音识别模型虽然具备较高的整体准确率&#xff0c;但在特定领域或专业场景中仍面临词汇误识别、术语混…

作者头像 李华