Advertisement
kutuzzzov

Урок 8 деревья и поиск

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