diff --git a/Problem43.java b/Problem43.java new file mode 100644 index 00000000..30861354 --- /dev/null +++ b/Problem43.java @@ -0,0 +1,25 @@ +// Time Complexity: O(N) +// Space Complexity: O(h) - height/depth of the tree + +class Solution { + private boolean flag; + private TreeNode prev; + public boolean isValidBST(TreeNode root) { + this.flag = true; + helper(root); + return flag; + } + + private void helper(TreeNode root) { + //base + if(root == null) return; + + //logic + helper(root.left); + if (this.prev != null && this.prev.val >= root.val) { + this.flag = false; + } + prev = root; + helper(root.right); + } +} \ No newline at end of file diff --git a/Problem44.java b/Problem44.java new file mode 100644 index 00000000..6fec812b --- /dev/null +++ b/Problem44.java @@ -0,0 +1,31 @@ +// Time Complexity: O(N) +// Space Complexity: O(N) +class Solution { + private int idx; + public TreeNode buildTree(int[] preorder, int[] inorder) { + Map map = new HashMap<>(); + for (int i = 0; i < inorder.length; i++) { + map.put(inorder[i],i); + } + this.idx = 0; + return helper(preorder, 0, preorder.length-1, map); + } + + private TreeNode helper(int[] preorder, int start, int end, Map map) { + //base + if (start > end) return null; + + //logic + int rootVal = preorder[idx]; + idx++; + + int rootIdx = map.get(rootVal); + + TreeNode root = new TreeNode(rootVal); + + root.left = helper(preorder, start, rootIdx-1, map); + root.right = helper(preorder, rootIdx+1, end, map); + + return root; + } +} \ No newline at end of file