Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cassert>
- 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(const TreeNode<T>* node, const T* min, const T* max)
- {
- if (node != nullptr) {
- if ((max && node->value >= *max) || (min && node->value <= *min)) return false;
- return CheckTreeProperty(node->left, min, &node->value) && CheckTreeProperty(node->right, &node->value, max);
- }
- return true;
- }
- template <typename T>
- bool CheckTreeProperty(const TreeNode<T>* node) {
- return CheckTreeProperty<T>(node, nullptr, nullptr);
- }
- int main() {
- //using T = TreeNode<int>;
- TreeNode<int>* root1 =
- new TreeNode<int>{6,
- new TreeNode<int>{4, new TreeNode<int>{3}, new TreeNode<int>{5}},
- new TreeNode<int>{7} };
- assert(CheckTreeProperty(root1));
- TreeNode<int>* root2 =
- new TreeNode<int>{6,
- new TreeNode<int>{4, new TreeNode<int>{3}, new TreeNode<int>{5}},
- new TreeNode<int>{7, new TreeNode<int>{8}} };
- assert(!CheckTreeProperty(root2));
- DeleteTree(root1);
- DeleteTree(root2);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement