Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cassert>
- #include <iostream>
- #include <ios>
- template <typename T>
- struct TreeNode {
- T value;
- TreeNode* left = nullptr;
- TreeNode* right = nullptr;
- };
- template <typename T>
- void DeleteTree(TreeNode<T>* node) {
- if (!node) {
- return;
- }
- DeleteTree(node->left);
- DeleteTree(node->right);
- delete node;
- }
- template <typename T>
- bool CheckTreeProperty(TreeNode<T>* node, const T* min, const T* max) {
- if (node == nullptr) {
- return true;
- }
- if (min != nullptr && node->value <= *min) {
- return false;
- }
- if (max != nullptr && node->value >= *max) {
- return false;
- }
- return CheckTreeProperty(node->left, min, &node->value) && CheckTreeProperty(node->right, &node->value, max);
- }
- template <typename T>
- bool CheckTreeProperty(TreeNode<T>* node) {
- T* min = nullptr;
- T* max = nullptr;
- return CheckTreeProperty(node, min, max);
- }
- int main() {
- using T = TreeNode<int>;
- T* root1 = new T{ 6, new T{4, new T{3}, new T{5}}, new T{7} };
- assert(CheckTreeProperty(root1));
- T* root2 = new T{ 6,
- new T{4, new T{3}, new T{5}}, new T{7, new T{8}} };
- assert(!CheckTreeProperty(root2));
- DeleteTree(root1);
- DeleteTree(root2);
- T* root3 = new T{ 4, new T{2}, new T{5, new T{1}, new T{7}} };
- std::cerr << std::boolalpha << CheckTreeProperty(root3) << std::endl;
- std::cerr << "OK" << std::endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement