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 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