Advertisement
Petrovi4

CheckTreeProperty

Sep 12th, 2022
1,331
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.49 KB | None | 0 0
  1. #include <cassert>
  2. #include <iostream>
  3. #include <ios>
  4.  
  5. template <typename T>
  6. struct TreeNode {
  7.     T value;
  8.     TreeNode* left = nullptr;
  9.     TreeNode* right = nullptr;
  10. };
  11.  
  12. template <typename T>
  13. void DeleteTree(TreeNode<T>* node) {
  14.     if (!node) {
  15.         return;
  16.     }
  17.     DeleteTree(node->left);
  18.     DeleteTree(node->right);
  19.     delete node;
  20. }
  21.  
  22. template <typename T>
  23. bool CheckTreeProperty(TreeNode<T>* node, const T* min, const T* max) {
  24.  
  25.     if (node == nullptr) {
  26.         return true;
  27.     }
  28.    
  29.     if (min != nullptr && node->value <= *min) {
  30.         return false;
  31.     }
  32.  
  33.     if (max != nullptr && node->value >= *max) {
  34.         return false;
  35.     }
  36.  
  37.     return CheckTreeProperty(node->left, min, &node->value) && CheckTreeProperty(node->right, &node->value, max);
  38. }
  39.  
  40.  
  41.  
  42. template <typename T>
  43. bool CheckTreeProperty(TreeNode<T>* node) {
  44.  
  45.     T* min = nullptr;
  46.     T* max = nullptr;
  47.  
  48.     return  CheckTreeProperty(node, min, max);
  49. }
  50.  
  51. int main() {
  52.  
  53.     using T = TreeNode<int>;
  54.     T* root1 = new T{ 6, new T{4, new T{3}, new T{5}}, new T{7} };
  55.  
  56.     assert(CheckTreeProperty(root1));
  57.  
  58.     T* root2 = new T{ 6,
  59.         new T{4, new T{3}, new T{5}}, new T{7, new T{8}} };
  60.  
  61.     assert(!CheckTreeProperty(root2));
  62.  
  63.     DeleteTree(root1);
  64.     DeleteTree(root2);
  65.  
  66.     T* root3 = new T{ 4, new T{2}, new T{5, new T{1}, new T{7}} };
  67.  
  68.     std::cerr << std::boolalpha << CheckTreeProperty(root3) << std::endl;
  69.     std::cerr << "OK" << std::endl;
  70.  
  71.     return 0;
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement