diff --git a/ConstructBinaryTree.java b/ConstructBinaryTree.java new file mode 100644 index 00000000..b4da2e51 --- /dev/null +++ b/ConstructBinaryTree.java @@ -0,0 +1,50 @@ +//Time Complexity : O(n) +//Space Complexity : O(n) + + /* Definition for a binary tree node. + * public 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; + * } + * } + */ + + + + import java.util.HashMap; + + public class ConstructBinaryTree { + int index; + public TreeNode buildTree(int[] preorder, int[] inorder) { + HashMap map = new HashMap<>(); + for(int i = 0; i < inorder.length; i++){ + map.put(inorder[i], i); + } + index = 0; + return helper(preorder, 0, preorder.length - 1, map); + } + + private TreeNode helper (int[] preorder, int start, int end, HashMap map) { + + if(start > end) return null; + + int rootVal = preorder[index]; + index++; + + int rootIndex = map.get(rootVal); + + TreeNode root = new TreeNode(rootVal); + + root.left = helper(preorder, start, rootIndex - 1, map); + root.right = helper(preorder, rootIndex + 1, end, map); + return root; + } + +} diff --git a/ValidateBST.java b/ValidateBST.java new file mode 100644 index 00000000..c7fd6725 --- /dev/null +++ b/ValidateBST.java @@ -0,0 +1,31 @@ +//Time Complexity: O(n) +//Space Complexity: O(h) +// Definition for a binary tree node. +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; + } + } + + +public class ValidateBST { + + public boolean isValidBST(TreeNode root) { + return compareNode(root, null, null); + } + + private boolean compareNode (TreeNode node, TreeNode lower, TreeNode upper) { + if(node == null) return true; + if(lower!= null && node.val<= lower.val) return false; + if(upper != null && node.val >= upper.val) return false; + return compareNode(node.left,lower,node) && compareNode(node.right,node,upper); + + } +}