Beispiel #1
0
class Solution:
    # inplace - swap left and right child and resursive invert left and right
    def invertTree(self, root):
        """
        :type root: TreeNode
        :rtype: TreeNode
        """
        if root:
            root.left, root.right = root.right, root.left
            self.invertTree(root.left)
            self.invertTree(root.right)
        return root

    # inplace - one liner
    def invertTree2(self, root):
        invert = self.invertTree2
        if root:
            root.left, root.right = invert(root.right), invert(root.left)
        return root


# import
import sys, os
sys.path.insert(0, os.path.abspath((os.pardir + os.sep) * 2 + 'mylib'))
from BinaryTreeTraversalGenerator import TreeNode, build_tree_from_list, serialize_tree_to_array
# test
root = build_tree_from_list([4, 2, 7, 1, 3, 6, 9])
print(serialize_tree_to_array(Solution().invertTree(root)))
root = build_tree_from_list([4, 2, 7, 1, 3, 6, 9])
print(serialize_tree_to_array(Solution().invertTree2(root)))
#         self.right = None
class Solution:
    # DP topdown resursive with memo
    def generateTrees(self, n):
        def generate(start, end):
            if start > end:
                return [None]
            if (start, end) in memo:
                return memo[(start, end)]
            res = []
            for i in range(start, end+1):
                for left in generate(start, i-1):
                    for right in generate(i+1, end):
                        node = TreeNode(i)
                        node.left, node.right = left, right
                        res.append(node)
            memo[(start, end)] = res
            return res
        if not n:
            return []
        memo = {}
        return generate(1, n)

# import
import sys, os
sys.path.insert(0, os.path.abspath((os.pardir + os.sep) * 2 + 'mylib'))
from BinaryTreeTraversalGenerator import TreeNode, serialize_tree_to_array
# test
for root in Solution().generateTrees(3):
    print(serialize_tree_to_array(root))
                root.right = build(inorder_ix + 1, inorder_end)
                return root

        inorder_dict = {v: i for i, v in enumerate(inorder)}
        self.preorder_ix = 0  # the cur index of preorder - pass by reference
        return build(0, len(inorder))  # NOT len-1!!


# import
import sys, os

sys.path.insert(0, os.path.abspath((os.pardir + os.sep) * 2 + 'mylib'))
from BinaryTreeTraversalGenerator import TreeNode, serialize_tree_to_array

inorder = [9, 5, 1, 7, 2, 12, 8, 4, 3, 11]
preorder = [8, 5, 9, 7, 1, 12, 2, 4, 11, 3]
'''
     8
   /   \
  5     4
 / \     \
9  7     11
  / \    /
 1  12  3
    /
   2
'''
# test
print(serialize_tree_to_array(Solution().buildTree(preorder[:], inorder)))
print(serialize_tree_to_array(Solution().buildTree2(preorder, inorder)))
                root.right = build(inorder_ix + 1, inorder_end)
                root.left = build(inorder_start, inorder_ix)
                return root

        inorder_dict = {v: i for i, v in enumerate(inorder)}
        # the cur index of postorder - pass by reference
        self.postorder_ix = len(postorder) - 1
        return build(0, len(inorder))  # NOT len-1!!


# import
import sys, os
sys.path.insert(0, os.path.abspath((os.pardir + os.sep) * 2 + 'mylib'))
from BinaryTreeTraversalGenerator import TreeNode, serialize_tree_to_array
inorder = [9, 5, 1, 7, 2, 12, 8, 4, 3, 11]
postorder = [9, 1, 2, 12, 7, 5, 3, 11, 4, 8]
'''
     8
   /   \
  5     4
 / \     \
9  7     11
  / \    /
 1  12  3
    /
   2
'''
# test
print(serialize_tree_to_array(Solution().buildTree(inorder, postorder[:])))
print(serialize_tree_to_array(Solution().buildTree2(inorder, postorder)))
    /   \
   1     3
'''
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    def sortedArrayToBST(self, nums):
        """
        :type nums: List[int]
        :rtype: TreeNode
        """
        if not nums:
            return None
        mid = len(nums) // 2
        root = TreeNode(nums[mid])
        root.left = self.sortedArrayToBST(nums[:mid])
        root.right = self.sortedArrayToBST(nums[mid+1:])
        return root

# import
import sys, os
sys.path.insert(0, os.path.abspath((os.pardir + os.sep) * 2 + 'mylib'))
from BinaryTreeTraversalGenerator import TreeNode, serialize_tree_to_array
# test
print(serialize_tree_to_array(Solution().sortedArrayToBST([1,2,3])))
print(serialize_tree_to_array(Solution().sortedArrayToBST([1,2,3,4,5,6,7])))