From 06ec2521a0b76699488bb3eeb2ad45858cc89632 Mon Sep 17 00:00:00 2001 From: amitmittal117 Date: Tue, 3 Feb 2026 19:16:05 -0800 Subject: [PATCH] [IMP] Trees-1 --- ...ree-from-preorder-and-inorder-traversal.py | 36 +++++++++++++++++ validate-binary-search-tree.py | 40 +++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 construct-binary-tree-from-preorder-and-inorder-traversal.py create mode 100644 validate-binary-search-tree.py diff --git a/construct-binary-tree-from-preorder-and-inorder-traversal.py b/construct-binary-tree-from-preorder-and-inorder-traversal.py new file mode 100644 index 00000000..f5b6d748 --- /dev/null +++ b/construct-binary-tree-from-preorder-and-inorder-traversal.py @@ -0,0 +1,36 @@ +''' +Time Complexity : O(2) +Space Complexity : O(n) +Did this code successfully run on Leetcode : Yes +Any problem you faced while coding this : No +''' +# 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 + rootVal = preorder[0] + rootIdx = -1 + for i in range(len(inorder)): + if inorder[i] == rootVal: + rootIdx = i + break + + root = TreeNode(rootVal) + inleft = inorder[:rootIdx] + inRight = inorder[rootIdx+1:] + + preleft = preorder[1:len(inleft)+1] + preRight = preorder[len(inleft)+1:] + + root.left = self.buildTree(preleft, inleft) + root.right = self.buildTree(preRight, inRight) + + return root + + \ No newline at end of file diff --git a/validate-binary-search-tree.py b/validate-binary-search-tree.py new file mode 100644 index 00000000..e495de5f --- /dev/null +++ b/validate-binary-search-tree.py @@ -0,0 +1,40 @@ +''' +Time Complexity : O(2) +Space Complexity : O(n) +Did this code successfully run on Leetcode : Yes +Any problem you faced while coding this : No +''' + +# 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 +import copy +class Solution: + def __init__(self): + self.flag = True + self.prev = None + + def helper(self, root): + if root == None: + return + + self.helper(root.left) + + # write condition to make the flag false + if self.prev != None and self.prev.val >= root.val: + self.flag = False + self.prev = root + + self.helper(root.right) + + def isValidBST(self, root: Optional[TreeNode]) -> bool: + + if root == None: + return True + + self.helper(root) + + return self.flag \ No newline at end of file