Exemplo n.º 1
0
        self.val = x
        self.left = None
        self.right = None


class Solution(object):
    def convertBST(self, root):
        """
        :type root: TreeNode
        :rtype: TreeNode
        """
        self.inorder_nodes_arr = []
        self.total = 0

        def inorder(node):
            if node:
                inorder(node.left)
                self.inorder_nodes_arr.append(node)
                self.total += node.val
                inorder(node.right)

        inorder(root)
        for node in self.inorder_nodes_arr:
            self.total -= node.val
            node.val += self.total
        return root


root = list_to_tree([5, 5, 5])
print tree_to_list(Solution().convertBST(root))
        :type root: TreeNode
        :rtype: TreeNode
        """
        if root == None: return None

        def get_sibling_and_parent(node):
            if node.left:
                node.left.sibling = node.right
                node.left.parent = node
                get_sibling_and_parent(node.left)

        get_sibling_and_parent(root)

        node = root
        while node.left:
            node = node.left
        new_root = node
        while node != root:
            node.left = node.sibling
            node.right = node.parent
            node = node.parent
        node.left = node.right = None

        return new_root


root = list_to_tree([1, 2, 3, 4, 5])
root = list_to_tree([])
new_root = Solution().upsideDownBinaryTree(root)
print tree_to_list(new_root)
Exemplo n.º 3
0
            elif node.right:
                parent, p = node, node.right
                while p.left:
                    parent = p
                    p = p.left
                if parent != node:
                    parent.left = p.right
                else:
                    parent.right = p.right
                node.val = p.val
                return root

            elif parent:
                if parent.left == node: parent.left = None
                if parent.right == node: parent.right = None
                return root
            else:
                return None
        else:
            return root


root = list_to_tree([5, 3, 6, 2, 4, None, 7])
root = list_to_tree([2, 1, 3])
root = list_to_tree([3, 2, 4, 1])

key = 3
root = Solution().deleteNode(root, key)
print tree_to_list(root)
        """Decodes your encoded data to tree.
        
        :type data: str
        :rtype: TreeNode
        """
        from collections import deque
        if data == "": return None
        arr = [None if x == "None" else x for x in data.split(",")]
        root = TreeNode(arr[0])
        q = deque([root])
        l_r = "left"
        for x in arr[1:]:
            node = None if x == None else TreeNode(x)
            if l_r == "left":
                q[0].left = node
                if node != None: q.append(node)
                l_r = "right"
            else:
                q[0].right = node
                if node != None: q.append(node)
                q.popleft()
                l_r = "left"
        return root


arr = [5, 4, 8, 11, None, 13, 4, 7, 2, None, None, 5, None]
codec = Codec()

root = list_to_tree(arr)
print tree_to_list(codec.deserialize(codec.serialize(root)))