diff --git a/ConstructBTFromPreAndIn.java b/ConstructBTFromPreAndIn.java new file mode 100644 index 00000000..477fa087 --- /dev/null +++ b/ConstructBTFromPreAndIn.java @@ -0,0 +1,46 @@ +import java.util.*; + +// Recursion, O(n) time, O(h) space +class Solution { + private int preIndex; + + public TreeNode buildTree(int[] preorder, int[] inorder) { + preIndex = 0; + Map map = new HashMap<>(); + + for (int i = 0; i < inorder.length; i++) { + map.put(inorder[i], i); + } + + return helper(preorder, 0, inorder.length-1, map); + } + + private TreeNode helper(int[] preorder, int start, int end, Map map) { + if (start > end) return null; + + TreeNode root = new TreeNode(preorder[preIndex]); + preIndex++; + + int mid = map.get(root.val); + + root.left = helper(preorder, start, mid-1, map); + root.right = helper(preorder, mid+1, end, map); + + return root; + } +} + + +class TreeNode { + int val; + TreeNode left; + TreeNode right; + TreeNode() {} + TreeNode(int val) { this.val = val; } + TreeNode(int val, TreeNode left, TreeNode right) { + this.val = val; + this.left = left; + this.right = right; + } +} + \ No newline at end of file diff --git a/ValidateBST.java b/ValidateBST.java new file mode 100644 index 00000000..f0e08e7a --- /dev/null +++ b/ValidateBST.java @@ -0,0 +1,32 @@ +// O(n) time, O(n) space +class Solution { + public boolean isValidBST(TreeNode root) { + return helper(root, Long.MIN_VALUE, Long.MAX_VALUE); + } + + private boolean helper(TreeNode root, long min, long max) { + if (root == null) return true; + + if (root.val <= min || root.val >= max) { + return false; + } + + boolean left = helper(root.left, min, root.val); + boolean right = helper(root.right, root.val, max); + + return left && right; + } +} + +class TreeNode { + int val; + TreeNode left; + TreeNode right; + TreeNode() {} + TreeNode(int val) { this.val = val; } + TreeNode(int val, TreeNode left, TreeNode right) { + this.val = val; + this.left = left; + this.right = right; + } +} \ No newline at end of file