Skip to content
Open

Trees-1 #1719

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions construct_tree_pre_and_in.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Definition for a binary tree node.
from typing import List


class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None


class Solution:
def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:

self.preorder_index = 0

# build a hashmap to store index and value for inorder list
inorder_index_map = {}
for index, value in enumerate(inorder):
inorder_index_map[value] = index

return self.helper(0, len(preorder) - 1, preorder, inorder_index_map)

def helper(self, left, right, preorder, inorder_index_map):
if left > right:
return None

# select the preorder_index element as the root and increment it
root_value = preorder[self.preorder_index]
root = TreeNode(root_value)
self.preorder_index+=1

# build left and right subtree
root.left = self.helper(left, inorder_index_map[root_value] - 1, preorder, inorder_index_map)
root.right = self.helper(inorder_index_map[root_value] + 1, right, preorder, inorder_index_map)

return root
25 changes: 25 additions & 0 deletions validate_bst.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Definition for a binary tree node.
from typing import Optional


class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right


class Solution:
def isValidBST(self, root: Optional[TreeNode]) -> bool:
return self.helper(root, float("-inf"), float("inf"))

def helper(self, root, low, high):
if not root:
return True

if root.val <= low or root.val >= high:
return False

return self.helper(root.right, root.val, high) and self.helper(
root.left, low, root.val
)