diff --git a/constructBTFromPreandInorder.cpp b/constructBTFromPreandInorder.cpp new file mode 100644 index 00000000..21c3d976 --- /dev/null +++ b/constructBTFromPreandInorder.cpp @@ -0,0 +1,41 @@ +/** + * Definition for a binary tree node. + * struct TreeNode { + * int val; + * TreeNode *left; + * TreeNode *right; + * TreeNode() : val(0), left(nullptr), right(nullptr) {} + * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} + * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} + * }; + + */ +class Solution { +public: + unordered_map um; + int preIndex; + TreeNode* helper(vector& preorder, int left, int right) { + if (left > right) { + return nullptr; + } + + TreeNode *root = new TreeNode(preorder[preIndex]); + preIndex++; + + int index=um[root->val]; + + root->left = helper(preorder, left, index-1); + root->right = helper(preorder, index+1, right); + + return root; + } + TreeNode* buildTree(vector& preorder, vector& inorder) { + for (int i=0;ipreIndex = 0; + int left = 0; + int right = preorder.size()-1; + return helper(preorder, left, right); + } +}; diff --git a/validateBST.cpp b/validateBST.cpp new file mode 100644 index 00000000..0f4eee3f --- /dev/null +++ b/validateBST.cpp @@ -0,0 +1,32 @@ +/** + * Definition for a binary tree node. + * struct TreeNode { + * int val; + * TreeNode *left; + * TreeNode *right; + * TreeNode() : val(0), left(nullptr), right(nullptr) {} + * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} + * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} + * }; + */ +class Solution { +public: + bool isValidBST(TreeNode* root) { + return helper(root, nullptr, nullptr); + } + + bool helper(TreeNode* root, TreeNode* min, TreeNode* max) { + // termination condition + if (root == nullptr) + return true; + + // logic + if (min != nullptr && root->val <= min->val) return false; + if (max != nullptr && root->val >= max->val) return false; + + + //branching in the tree + return helper(root->left, min, root) && helper(root->right, root, max); + + } +};