def _buildTree(self, start, end):
     if start < end:
         root = TreeNode(self.postorder.pop())
         index = self.inorder.index(root.val)
         root.right = self._buildTree(index + 1, end)
         root.left = self._buildTree(start, index)
         return root
示例#2
0
def genertate_bin_tree(nums):
    ""
    if not nums or len(nums) < 1:
        return None

    root = TreeNode()

    return root
 def helper(self, nums, left, right):
     if left == right:
         return nums[left]
     mid = left + (
         (right - left) >> 1)  # Note! + has higher priority than >>
     root = TreeNode(nums[mid])
     root.left = self.helper(nums, left, mid - 1)
     root.right = self.helper(nums, mid + 1, right)
     return root
 def build_tree(self, n):
     if n <= 0:
         return None
     l = self.build_tree(n / 2)
     root = TreeNode(self.cur.val)
     self.cur = self.cur.next
     r = self.build_tree(n - n / 2 - 1)
     root.left = l
     root.right = r
     return root
示例#5
0
 def allPossibleFBT(self, N: int):
     if N in self.cache:
         return self.cache[N]
     tree = []
     for i in range(1, N, 2):
         for l in self.allPossibleFBT(i):
             for r in self.allPossibleFBT(N - i - 1):
                 node = TreeNode(0)
                 node.left = l
                 node.right = r
                 tree.append(node)
     self.cache[N] = tree
     return self.cache[N]
示例#6
0
 def dfs(self, start, end):
     if start > end:
         return [None]
     res = []
     for rootval in range(start, end + 1):
         LeftTrees = self.dfs(start, rootval - 1)
         RightTrees = self.dfs(rootval + 1, end)
         for ltree in LeftTrees:
             for rtree in RightTrees:
                 root = TreeNode(rootval)
                 root.left = ltree
                 root.right = rtree
                 res.append(root)
     return res
    def sortedListToBST(self, head):
        if not head:
           return None
        if not head.next:
            return TreeNode(head.val)

        fast = head.next
        slow = head
        last_of_left = None
        while fast and fast.next:
            fast = fast.next.next
            last_of_left = slow
            slow = slow.next

        root = TreeNode(slow.val)

        if last_of_left:
            last_of_left.next = None
            root.left = self.sortedListToBST(head)

        if slow.next:
            root.right = self.sortedListToBST(slow.next)
        return root
 def buildTree(self, preorder, inorder):
     """
     :type preorder: List[int]
     :type inorder: List[int]
     :rtype: TreeNode
     """
     # write your code here
     if inorder:
         root_pos = inorder.index(preorder[0])
         del preorder[0]
         root = TreeNode(inorder[root_pos])
         root.left = self.buildTree(preorder, inorder[:root_pos])
         root.right = self.buildTree(preorder, inorder[root_pos + 1:])
         return root
    def buildTree_bad(self, inorder, postorder):
        """
        :type inorder: List[int]
        :type postorder: List[int]
        :rtype: TreeNode
        """

        if inorder:
            root_pos = inorder.index(postorder[-1])
            del postorder[-1]
            root = TreeNode(inorder[root_pos])
            root.left = self.buildTree(inorder[0: root_pos], postorder[:root_pos])
            root.right = self.buildTree(inorder[root_pos + 1: len(inorder)], postorder[root_pos:])

            return root
示例#10
0
    def __init__(self):
        '''
        满二叉树是一类二叉树,其中每个结点恰好有 0 或 2 个子结点。

返回包含 N 个结点的所有可能满二叉树的列表。 答案的每个元素都是一个可能树的根结点。

答案中每个树的每个结点都必须有 node.val=0。

你可以按任何顺序返回树的最终列表。

示例:
输入:7
输出:[[0,0,0,null,null,0,0,null,null,0,0],[0,0,0,null,null,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,null,null,null,null,0,0],[0,0,0,0,0,null,null,0,0]]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/all-possible-full-binary-trees
        '''

        self.cache = {0: [], 1: [TreeNode(0)]}