return None, None if node.left: node.left.right, node.left.left = dfs(node.left) if node.right: node.right.right, node.right.left = dfs(node.right) return node.left, node.right if not root: return root.right, root.left = dfs(root) return root if __name__ == '__main__': root = TreeNode(4) left = TreeNode(2) right = TreeNode(7) root.left = left root.right = right leftleft = TreeNode(1) leftright = TreeNode(3) left.left = leftleft left.right = leftright rightleft = TreeNode(6) rightright = TreeNode(9) right.left = rightleft right.right = rightright midOrder(root) root = Solution().invertTree(root) midOrder(root) midOrder(Solution().invertTree(None))
return dfs(0, len(inorder) - 1, 0, len(postorder) - 1) class Solution: def buildTree(self, inorder, postorder): """ :type inorder: List[int] :type postorder: List[int] :rtype: TreeNode """ def build(mark): if inorder and inorder[-1] != mark: root = TreeNode(postorder.pop()) root.right = build(root.val) inorder.pop() root.left = build(mark) return root return None return build(None) if __name__ == '__main__': # preorder = [3, 9, 20, 15, 7] preorder = [3, 2, 1, 4] # inorder = [9, 3, 15, 20, 7] inorder = [1, 2, 3, 4] root = Solution().buildTree(preorder, inorder) from common.tree import midOrder midOrder(root)
if not t2: return t1 t1.val = t1.val + t2.val t1.left = self.mergeTrees(t1.left, t2.left) t1.right = self.mergeTrees(t1.right, t2.right) return t1 if __name__ == '__main__': t1root = TreeNode(1) t1left = TreeNode(3) t1right = TreeNode(2) t1root.left = t1left t1root.right = t1right t1leftleft = TreeNode(5) t1left.left = t1leftleft t2root = TreeNode(2) t2left = TreeNode(1) t2right = TreeNode(3) t2root.left = t2left t2root.right = t2right t2leftright = TreeNode(4) t2rightright = TreeNode(7) t2left.right = t2leftright t2right.right = t2rightright t = Solution().mergeTrees(t1root, t2root) midOrder(t)