Advertisement
35657

Untitled

Oct 6th, 2022
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.09 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) {
  22.     if (node->left != nullptr) {
  23.         if (node->left->value >= node->value) {
  24.             return false;
  25.         }
  26.         if (!CheckTreeProperty(node->left)) {
  27.             return false;
  28.         }
  29.     }
  30.     if (node->right != nullptr) {
  31.         if (node->right->value <= node->value) {
  32.             return false;
  33.         }
  34.         if (!CheckTreeProperty(node->right)) {
  35.             return false;
  36.         }
  37.     }
  38.     return true;
  39. }
  40.  
  41.  
  42. int main() {
  43.     using T = TreeNode<int>;
  44.     T* root1 = new T{6,
  45.         new T{4, new T{3}, new T{5}}, new T{7}};
  46.     assert(CheckTreeProperty(root1));
  47.  
  48.     T* root2 = new T{6,
  49.         new T{4, new T{3}, new T{5}}, new T{7, new T{8}}};
  50.     assert(!CheckTreeProperty(root2));
  51.    
  52.    
  53.  
  54.     DeleteTree(root1);
  55.     DeleteTree(root2);
  56.    
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement