1 """ 2 Invert a binary tree. 3 Example: 4 Input: 5 4 6 / 7 2 7 8 / / 9 1 3 6 9 10 Output: 11 4 12 / 13 7 2 14 / / 15 9 6 3 1 16 """ 17 class TreeNode: 18 def __init__(self, x): 19 self.val = x 20 self.left = None 21 self.right = None 22 23 class Solution1(object): 24 def invertTree(self, root): 25 if root == None: 26 return root 27 root.left, root.right = root.right, root.left 28 self.invertTree(root.left) 29 self.invertTree(root.right) 30 return root 31 """ 32 递归都可以用栈来迭代实现 33 因此存在用栈遍历的第二种解法 34 """ 35 class Solution2(object): 36 def invertTree(self, root): 37 if not root: 38 return root 39 stack = [root] 40 while stack: 41 node = stack.pop(-1) #先弹出根结点,再依次让左右孩子压栈 42 if node.left: 43 stack.append(node.left) #pop(0)是弹出list的头元素 pop(-1)弹出尾元素 44 if node.right: #在这里用两个均可,即队列和栈都可以 45 stack.append(node.right) 46 node.left, node.right = node.right, node.left 47 return root