diff --git a/problem1.py b/problem1.py new file mode 100644 index 00000000..a7451c2e --- /dev/null +++ b/problem1.py @@ -0,0 +1,26 @@ +# problem 1 - https://leetcode.com/problems/validate-binary-search-tree/ + +# Definition for a binary tree node. +# class TreeNode: +# def __init__(self, val=0, left=None, right=None): +# self.val = val +# self.left = left +# self.right = right +class Solution: + + def __init__(self): + self.flag = True + + def isValidBST(self, root: Optional[TreeNode]) -> bool: + self.helper(root,float(-inf),float(inf)) + return self.flag + + def helper(self,node,min_val,max_val): + if not node: + return + if node.val >= max_val or node.val <= min_val: + self.flag = False + self.helper(node.left,min_val,node.val) + self.helper(node.right,node.val,max_val) + + \ No newline at end of file diff --git a/problem2.py b/problem2.py new file mode 100644 index 00000000..06b7f98e --- /dev/null +++ b/problem2.py @@ -0,0 +1,23 @@ +# problem 2 + +# Definition for a binary tree node. +# class TreeNode: +# def __init__(self, val=0, left=None, right=None): +# self.val = val +# self.left = left +# self.right = right +class Solution: + def buildTree(self, preorder: List[int], inorder: List[int]) -> Optional[TreeNode]: + if len(preorder) == 0: + return None + root_val = preorder[0] + root_val_idx = inorder.index(root_val) + + left_inorder = inorder[:root_val_idx] + right_inorder = inorder[root_val_idx+1:] + left_preorder = preorder[1:len(left_inorder)+1] + right_preorder = preorder[len(left_inorder)+1:] + node = TreeNode(root_val) + node.left = self.buildTree(left_preorder,left_inorder) + node.right = self.buildTree(right_preorder,right_inorder) + return node