C++ 二叉搜刮树代码

[复制链接]
发表于 2025-10-19 05:19:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
C++ 二叉搜刮树代码
  1. #include <iostream>
  2. using namespace std;
  3. template<typename T>
  4. struct TreeNode{
  5.         T val;
  6.         TreeNode *left;
  7.         TreeNode *right;
  8.         TreeNode():val(0), left(NULL), right(NULL){}
  9.         TreeNode(T x):val(x), left(NULL), right(NULL){}
  10. };
  11. template<typename T>
  12. class BinarySearchTree{
  13. private:
  14.         TreeNode<T> *root;
  15.        
  16.         TreeNode<T>* insertNode(TreeNode<T> *node, T value);
  17.         TreeNode<T>* removeNode(TreeNode<T> *node, T value);
  18.         bool searchNode(TreeNode<T> *node, T value);
  19.         void inOrder(TreeNode<T> *node);
  20. public:
  21.         BinarySearchTree(): root(NULL){}
  22.         ~BinarySearchTree();
  23.        
  24.         void insert(T value){
  25.                 root = insertNode(root, value);
  26.         }
  27.        
  28.         void remove(T value){
  29.                 root = removeNode(root, value);
  30.         }
  31.        
  32.         bool search(T value){
  33.                 return searchNode(root, value);
  34.         }
  35.         void inOrderTraversal(){
  36.                 inOrder(root);
  37.                 cout << endl;
  38.         }
  39. };
  40. template<typename T>
  41. BinarySearchTree<T>::~BinarySearchTree(){
  42.         while(root){
  43.                 remove(root->val);
  44.         }
  45. }
  46. template<typename T>
  47. TreeNode<T>* BinarySearchTree<T>::insertNode(TreeNode<T> *node, T value){
  48.         if(node == NULL){
  49.                 return new TreeNode<T>(value);
  50.         }
  51.         if(value < node->val){
  52.                 node->left = insertNode(node->left, value);
  53.         }else if(value > node->val){
  54.                 node->right = insertNode(node->right, value);
  55.         }
  56.         return node;
  57. }
  58. template<typename T>
  59. TreeNode<T>* BinarySearchTree<T>::removeNode(TreeNode<T> *node, T value){
  60.         if(node == NULL){
  61.                 return NULL;
  62.         }
  63.         if(value < node->val){
  64.                 node->left = removeNode(node->left, value);
  65.         }else if(value > node->val){
  66.                 node->right = removeNode(node->right, value);
  67.         }else{
  68.                 if(node->left == NULL && node->right == NULL){
  69.                         delete node;
  70.                         return NULL;
  71.                 }else if(node->left == NULL){
  72.                         TreeNode<T> *rightChild = node->right;
  73.                         delete node;
  74.                         return rightChild;
  75.                 }else if(node->right == NULL){
  76.                         TreeNode<T> *leftChild = node->left;
  77.                         delete node;
  78.                         return leftChild;
  79.                 }else{
  80.                         TreeNode<T> *replacement = node->right;
  81.                         while(replacement->left){
  82.                                 replacement = replacement->left;
  83.                         }
  84.                         node->val = replacement->val;
  85.                         node->right = removeNode(node->right,replacement->val);
  86.                 }
  87.         }
  88.         return node;
  89. }
  90. template<typename T>
  91. bool BinarySearchTree<T>::searchNode(TreeNode<T> *node, T value){
  92.         if(node == NULL){
  93.                 return false;
  94.         }
  95.         if(value < node->val){
  96.                 return searchNode(node->left, value);
  97.         }else if(value > node->val){
  98.                 return searchNode(node->right, value);
  99.         }
  100.     return true;
  101. }
  102. template<typename T>
  103. void BinarySearchTree<T>::inOrder(TreeNode<T> *node){
  104.         if(node){
  105.                 inOrder(node->left);
  106.                 cout << node->val << ',';
  107.                 inOrder(node->right);
  108.         }
  109. }
  110. int main()
  111. {
  112.     BinarySearchTree<int> bst;
  113.         bst.insert(50);
  114.         bst.insert(40);
  115.         bst.insert(60);
  116.         bst.insert(80);
  117.         bst.insert(90);
  118.         bst.insert(10);
  119.         bst.insert(20);
  120.         bst.insert(30);
  121.         bst.insert(70);
  122.         bst.inOrderTraversal();
  123.         cout << bst.search(9090) << endl;
  124.         cout << bst.search(70) << endl;
  125.         bst.remove(70);
  126.         bst.inOrderTraversal();
  127.         bst.insert(65);
  128.         bst.inOrderTraversal();
  129.     return 0;
  130. }
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表