C++ 二叉搜索树代码

embedded/2025/3/13 11:05:24/

C++ 二叉搜索树代码

#include <iostream>
using namespace std;template<typename T>
struct TreeNode{T val;TreeNode *left;TreeNode *right;TreeNode():val(0), left(NULL), right(NULL){}TreeNode(T x):val(x), left(NULL), right(NULL){}
};template<typename T>
class BinarySearchTree{
private:TreeNode<T> *root;TreeNode<T>* insertNode(TreeNode<T> *node, T value);TreeNode<T>* removeNode(TreeNode<T> *node, T value);bool searchNode(TreeNode<T> *node, T value);void inOrder(TreeNode<T> *node);
public:BinarySearchTree(): root(NULL){}~BinarySearchTree();void insert(T value){root = insertNode(root, value);}void remove(T value){root = removeNode(root, value);}bool search(T value){return searchNode(root, value);}void inOrderTraversal(){inOrder(root);cout << endl;}
};template<typename T>
BinarySearchTree<T>::~BinarySearchTree(){while(root){remove(root->val);}
}template<typename T>
TreeNode<T>* BinarySearchTree<T>::insertNode(TreeNode<T> *node, T value){if(node == NULL){return new TreeNode<T>(value);}if(value < node->val){node->left = insertNode(node->left, value);}else if(value > node->val){node->right = insertNode(node->right, value);}return node;
}template<typename T>
TreeNode<T>* BinarySearchTree<T>::removeNode(TreeNode<T> *node, T value){if(node == NULL){return NULL;}if(value < node->val){node->left = removeNode(node->left, value);}else if(value > node->val){node->right = removeNode(node->right, value);}else{if(node->left == NULL && node->right == NULL){delete node;return NULL;}else if(node->left == NULL){TreeNode<T> *rightChild = node->right;delete node;return rightChild;}else if(node->right == NULL){TreeNode<T> *leftChild = node->left;delete node;return leftChild;}else{TreeNode<T> *replacement = node->right;while(replacement->left){replacement = replacement->left;}node->val = replacement->val;node->right = removeNode(node->right,replacement->val);}}return node;
}template<typename T>
bool BinarySearchTree<T>::searchNode(TreeNode<T> *node, T value){if(node == NULL){return false;}if(value < node->val){return searchNode(node->left, value);}else if(value > node->val){return searchNode(node->right, value);}return true;
}template<typename T>
void BinarySearchTree<T>::inOrder(TreeNode<T> *node){if(node){inOrder(node->left);cout << node->val << ',';inOrder(node->right);}
}int main()
{BinarySearchTree<int> bst;bst.insert(50);bst.insert(40);bst.insert(60);bst.insert(80);bst.insert(90);bst.insert(10);bst.insert(20);bst.insert(30);bst.insert(70);bst.inOrderTraversal();cout << bst.search(9090) << endl;cout << bst.search(70) << endl;bst.remove(70);bst.inOrderTraversal();bst.insert(65);bst.inOrderTraversal();return 0;
}


http://www.ppmy.cn/embedded/172222.html

相关文章

要登录的设备ip未知时的处理方法

目录 1 应用场景... 1 2 解决方法&#xff1a;... 1 2.1 wireshark设置... 1 2.2 获取网口mac地址&#xff0c;wireshark抓包前预过滤掉自身mac地址的影响。... 2 2.3 pc网口和设备对接... 3 2.3.1 情况1&#xff1a;... 3 2.3.2 情…

Google Filament 渲染引擎(2)-Backend 核心类介绍

Google Filament 渲染引擎(2)-Backend 核心类介绍 阅读说明: 本文基于 filament 版本: v1.58.0文本更加阐述 Backend 内部核心类的关系, 示例代码作了非常多的删减和简化 文本将以创建纹理为例, 阐述 Backend 内部的流程。后端图形接口以 OpenGL 为例。 核心类的功能概览: …

TikTok多店铺网络安全搭建指南

在跨境电商和社交电商的浪潮中&#xff0c;TikTok已成为许多商家拓展业务的重要平台。随着多店铺运营模式的普及&#xff0c;网络安全问题也日益凸显。如何搭建一个安全、稳定的网络环境&#xff0c;保障多店铺数据的安全性和业务的连续性&#xff0c;成为商家亟需解决的问题。…

Python----计算机视觉处理(opencv:像素,RGB颜色,图像的存储,opencv安装,代码展示)

一、计算机眼中的图像 像素 像素是图像的基本单元&#xff0c;每个像素存储着图像的颜色、亮度和其他特征。一系列像素组合到一起就形成 了完整的图像&#xff0c;在计算机中&#xff0c;图像以像素的形式存在并采用二进制格式进行存储。根据图像的颜色不 同&#xff0c;每个像…

vue的 props 与 $emit 以及 provide 与 inject 的 组件之间的传值对比

好的&#xff0c;下面是 props 与 $emit 以及 provide 与 inject 的对比&#xff1a; 1. props 与 $emit props&#xff1a;父组件通过 props 向子组件传递数据&#xff0c;子组件接收后不可修改。子组件只能读取 props 传递给它的数据。如果需要修改或更新父组件的状态&#…

设计模式在 JDK 中的具体应用与分析

一、设计模式 GOF 设计模式是面向对象设计中常见问题的可复用解决方案&#xff0c;通过 23 种经典模式 提供了一套标准化的设计思路&#xff0c;用于解决软件设计中反复出现的架构和交互问题。其核心特点包括&#xff1a; 经验驱动&#xff1a;源于实际项目的经验总结&#xf…

目录《Vue 3 + TypeScript + DeepSeek 全栈开发实战》

在快速迭代的软件开发世界里&#xff0c;技术的融合与创新始终是推动行业前行的不竭动力。今天&#xff0c;我们站在了前端技术与大数据搜索技术交汇的十字路口&#xff0c;手中的工具不再仅仅是编码的利器&#xff0c;更是解锁未来应用无限可能的钥匙。正是基于这样的时代背景…

【踩坑记录】MAC M4 mini 系统初始化

① 一定要准备好一个usb拓展坞&#xff0c;否则连不上键鼠&#xff01; ② 初始化时&#xff0c;跳过mac账号登录&#xff0c;进入系统后再登录快一百倍&#xff01; ③ 安装nvm&#xff0c;遇到报错&#xff1a;xcode-select: note: install requested for command line dev…