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