35657

Untitled

Oct 6th, 2022
266
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.07 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. int main() {
  42.     using T = TreeNode<int>;
  43.     T* root1 = new T{6,
  44.         new T{4, new T{3}, new T{5}}, new T{7}};
  45.     assert(CheckTreeProperty(root1));
  46.  
  47.     T* root2 = new T{6,
  48.         new T{4, new T{3}, new T{5}}, new T{7, new T{8}}};
  49.     assert(!CheckTreeProperty(root2));
  50.  
  51.     DeleteTree(root1);
  52.     DeleteTree(root2);
  53. }
Advertisement
Add Comment
Please, Sign In to add comment