def AddTreeNode(self, preorder, prestart, preend, inorder, instart, inend):
     nodesLen = preend - prestart
     if nodesLen == 0: return None
     elif nodesLen == 1: return TreeNode(preorder[prestart])
     root = TreeNode(preorder[prestart])
     rootIdx = inorder.index(preorder[prestart]) - instart
     root.left = self.AddTreeNode(preorder, prestart+1, prestart+rootIdx+1, inorder, instart, instart+rootIdx)
     root.right = self.AddTreeNode(preorder, prestart+rootIdx+1, preend, inorder, instart+rootIdx+1, inend)
     return root
Example #2
0
def main():
    solver = Solver()
    root = TreeNode(3)
    root.left = TreeNode(9)
    root.right = TreeNode(20)
    root.right.left = TreeNode(15)
    root.right.right = TreeNode(7)

    print(solver.max_depth(root))
 def AddTreeNode(self, preorder, prestart, preend, inorder, instart, inend):
     nodesLen = preend - prestart
     if nodesLen == 0: return None
     elif nodesLen == 1: return TreeNode(preorder[prestart])
     root = TreeNode(preorder[prestart])
     rootIdx = inorder.index(preorder[prestart]) - instart
     root.left = self.AddTreeNode(preorder, prestart + 1,
                                  prestart + rootIdx + 1, inorder, instart,
                                  instart + rootIdx)
     root.right = self.AddTreeNode(preorder, prestart + rootIdx + 1, preend,
                                   inorder, instart + rootIdx + 1, inend)
     return root
 def solution(self, nums):
     """
     :type nums: List[int]
     :rtype: TreeNode
     """
     numsLen = len(nums)
     if numsLen == 0:
         return None
     elif numsLen == 1:
         return TreeNode(nums[0])
     else:
         root = TreeNode(nums[numsLen / 2])
         root.left = self.solution(nums[:numsLen / 2])
         root.right = self.solution(nums[numsLen / 2 + 1:])
     return root
 def solution(self, preorder, inorder): # not memory efficient since every recursive created new preorder/inorder lists
     """
     :type preorder: List[int]
     :type inorder: List[int]
     :rtype: TreeNode
     """
     nodeLen = len(preorder)
     if nodeLen == 0: return None
     elif nodeLen == 1: return TreeNode(preorder[0])
     root = TreeNode(preorder[0])
     for rootIdx in range(nodeLen):
         if inorder[rootIdx] == preorder[0]: break
     root.left = self.solution(preorder[1:rootIdx+1], inorder[:rootIdx])
     root.right = self.solution(preorder[rootIdx+1:], inorder[rootIdx+1:])
     return root
 
     
 def solution(
     self, preorder, inorder
 ):  # not memory efficient since every recursive created new preorder/inorder lists
     """
     :type preorder: List[int]
     :type inorder: List[int]
     :rtype: TreeNode
     """
     nodeLen = len(preorder)
     if nodeLen == 0: return None
     elif nodeLen == 1: return TreeNode(preorder[0])
     root = TreeNode(preorder[0])
     for rootIdx in range(nodeLen):
         if inorder[rootIdx] == preorder[0]: break
     root.left = self.solution(preorder[1:rootIdx + 1], inorder[:rootIdx])
     root.right = self.solution(preorder[rootIdx + 1:],
                                inorder[rootIdx + 1:])
     return root