示例#1
0
 def helper(left: int, right: int) -> TreeNode:
     if left > right:
         return None
     mid = (left + right) // 2
     node = TreeNode(nums[mid])
     node.left = helper(left, mid-1)
     node.right = helper(mid+1, right)
     return node
示例#2
0
 def constructFromPrePost(self, pre: List[int], post: List[int]) -> TreeNode:
     root = TreeNode(pre.pop(0))
     if root.val != post[0]:
         root.left = self.constructFromPrePost(pre, post)
     if root.val != post[0]:
         root.right = self.constructFromPrePost(pre, post)
     post.pop(0)
     return root
 def helper2(low:int, hight: int) -> TreeNode:
     if low > hight:
         return None
     rootval = postorder.pop();
     node = TreeNode(rootval)
     mid = valindex[rootval];
     node.right = helper2(mid+1, hight)
     node.left = helper2(low, mid-1)
     return node
示例#4
0
 def helper() -> TreeNode:
     root = TreeNode(pre[self.preindex])
     self.preindex += 1
     if root.val != post[self.postindex]:
         root.left = helper()
     if root.val != post[self.postindex]:
         root.right = helper()
     self.postindex += 1
     return root
        def listToBST(l: int, r: int) -> TreeNode:
            if l > r:
                return None
            if l == r:
                return TreeNode(sorted_list[l])

            mid = (l + r) // 2
            node = TreeNode(sorted_list[mid])
            node.left = listToBST(l, mid - 1)
            node.right = listToBST(mid + 1, r)
            return node
        def helper(infrom: int, postfrom: int, length: int) -> TreeNode:
            if length == 0:
                return None
            rootval = postorder[postfrom+length-1]
            node = TreeNode(rootval)
            inorderindex = valindex[rootval]
            leftlen = inorderindex - infrom
            rightlen = length - 1 - leftlen

            node.left = helper(infrom, postfrom, leftlen)
            node.right = helper(infrom+leftlen+1, postfrom+leftlen, rightlen)
            return node
    def deleteNode(self, root: TreeNode, key: int) -> TreeNode:
        def previousNumber(node: TreeNode) -> int:
            """
            previous number is the maximum of its left subtree(if not null), one left, other right
            :param node:
            :return:
            """
            #node and node.left is not null
            node = node.left
            while node.right:
                node = node.right
            return node.val

        def nextNumber(node: TreeNode) -> int:
            """
            next number is the minimum of its right subtree(if not null), one right, other left
            :param node:
            :return:
            """
            #node and node.right is not null
            node = node.right
            while node.left:
                node = node.left
            return node.val

        if not root:
            return root
        if key < root.val:
            root.left = self.deleteNode(root.left, key)
        elif key > root.val:
            root.right = self.deleteNode(root.right, key)
        else:  #key = root.val
            """
            if not root.left and not root.right:
                root = None
            elif root.right:
                root.val = nextNumber(root)
                root.right = self.deleteNode(root.right, root.val)
            else: #root.left
                root.val = previousNumber(root)
                root.left = self.deleteNode(root.left, root.val)
            """
            if not root.left:
                return root.right
            elif not root.right:
                return root.left
            root.val = nextNumber(root)
            root.right = self.deleteNode(root.right, root.val)
        return root
        def helper() -> TreeNode:
            val, sign = 0, True
            if s[self.index] == '-':
                sign = False
                self.index += 1
            while self.index < len(s) and s[self.index].isdigit():
                val = val * 10 + int(s[self.index])
                self.index += 1

            if not sign:
                val = -val

            node = TreeNode(val)
            if self.index < len(s) and s[self.index] == '(':
                self.index += 1
                node.left = helper()
                if self.index < len(s) and s[self.index] == '(':
                    self.index += 1
                    node.right = helper()
            if self.index < len(s) and s[self.index] == ')':
                self.index += 1

            return node