当前位置: 首页 > news >正文

C++ 二叉搜索树代码

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.lryc.cn/news/547638.html

相关文章:

  • DeepSeek+知识库+鸿蒙,助力鸿蒙高效开发
  • 蓝桥杯牛客1-10重点(自用)
  • Kafka - 高吞吐量的七项核心设计解析
  • Towards Precise and Explainable Hardware Trojan Localization at LUT Level
  • Python实现鼠标点击获取窗口进程信息
  • Mac安装jdk教程
  • 【HeadFirst系列之HeadFirst设计模式】第14天之与设计模式相处:真实世界中的设计模式
  • JDBC 完全指南:掌握 Java 数据库交互的核心技术
  • Vue父子组件传递笔记
  • 文件上传漏洞与phpcms漏洞安全分析
  • 【deepseek】辅助思考生物学问题:ICImapping构建遗传图谱gap较大
  • linux磁盘非lvm分区
  • Windows下sql server2012安装流程
  • css之英文换行样式
  • 绝美焦糖暖色调复古风景画面Lr调色教程,手机滤镜PS+Lightroom预设下载!
  • 文件解析:doc、docx、pdf
  • 计算机网络基础:VLAN(虚拟局域网)
  • C++学习笔记(十一)——循环结构
  • 【C++】二叉树相关算法题
  • 物联网IoT系列之MQTT协议基础知识
  • 【大学生体质】智能 AI 旅游推荐平台(Vue+SpringBoot3)-完整部署教程
  • 【Node.js入门笔记1---初始Node.js)】
  • 自学Java-JavaSE基础加强(多线程)
  • 数字后端培训实战项目六大典型后端实现案例
  • 安卓免费多功能工具:一站式解决 PDF 阅读、编辑、转换等需求
  • diffuser库使用本地模型生成图像
  • 递归—基础算法
  • 全面复习回顾——C++语法篇2
  • 探秘基带算法:从原理到5G时代的通信变革【十】基带算法应用与对比
  • Linux | Vim 鼠标不能右键粘贴、跨系统复制粘贴