news 2026/5/12 20:47:30

二叉搜索树

作者头像

张小明

前端开发工程师

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/5/7 6:41:48

BSHM抠图经济方案:云端GPU用多少付多少,不花冤枉钱

BSHM抠图经济方案&#xff1a;云端GPU用多少付多少&#xff0c;不花冤枉钱 你是不是也遇到过这样的烦恼&#xff1f;想用AI技术帮孩子制作一份精美的成长相册&#xff0c;记录下他/她每一个可爱的瞬间。可家里唯一能用的电脑是老公办公用的轻薄本&#xff0c;没有独立显卡&…

作者头像 李华
网站建设 2026/5/12 8:27:39

PaddleOCR-VL性能分析:元素级识别准确率评测

PaddleOCR-VL性能分析&#xff1a;元素级识别准确率评测 1. 引言 随着数字化转型的加速&#xff0c;文档解析技术在金融、教育、政务等领域的应用日益广泛。传统OCR系统通常依赖多阶段流水线架构&#xff0c;难以高效处理复杂版式和多样化语言内容。百度开源的PaddleOCR-VL-W…

作者头像 李华
网站建设 2026/5/7 7:51:58

Z-Image-Turbo依赖管理:确保PyTorch与ModelScope版本兼容

Z-Image-Turbo依赖管理&#xff1a;确保PyTorch与ModelScope版本兼容 1. 背景与环境概述 随着文生图大模型在创意设计、内容生成等领域的广泛应用&#xff0c;高效、稳定的本地部署环境成为开发者和研究人员的核心需求。Z-Image-Turbo作为阿里达摩院基于ModelScope平台推出的…

作者头像 李华
网站建设 2026/5/12 17:49:30

ComfyUI GPU选型指南:最适合ComfyUI的显卡推荐

ComfyUI GPU选型指南&#xff1a;最适合ComfyUI的显卡推荐 1. 引言&#xff1a;为什么ComfyUI需要合适的GPU支持 随着AI生成内容&#xff08;AIGC&#xff09;技术的快速发展&#xff0c;ComfyUI作为一款基于节点式工作流的图形化界面工具&#xff0c;正在被越来越多开发者和…

作者头像 李华
网站建设 2026/5/9 9:06:35

亲测Sambert语音合成:中文多情感效果超预期

亲测Sambert语音合成&#xff1a;中文多情感效果超预期 1. 引言&#xff1a;当语音合成不再“冷冰冰” 在传统文本转语音&#xff08;Text-to-Speech, TTS&#xff09;系统中&#xff0c;机器朗读往往语调单一、缺乏情绪起伏&#xff0c;给人以机械感和距离感。随着人机交互体…

作者头像 李华
网站建设 2026/5/5 10:44:52

动手试了GLM-TTS,3秒音频克隆出我的声音太神奇

动手试了GLM-TTS&#xff0c;3秒音频克隆出我的声音太神奇 1. 引言&#xff1a;零样本语音克隆的现实体验 在语音合成技术快速演进的今天&#xff0c;GLM-TTS 正以“3秒克隆人声”的能力引发广泛关注。作为智谱开源的一款AI文本转语音模型&#xff0c;它不仅支持高保真音色复…

作者头像 李华