# -*- coding:utf-8 -*- class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None class Solution: # 返回镜像树的根节点 def Mirror(self, root): # write code here if root == None: return None if root.left == None or root.right == None: return self.change(root) if root.left.left is None and root.left.right is None and root.right.left is None and root.right.right is None: return self.change(root) else: mirrorRoot = TreeNode(root.val) mirrorRoot.left = self.Mirror(root.right) mirrorRoot.right = self.Mirror(root.left) return mirrorRoot def Mirror2(self, root): # write code here if not root: return root node = root.left root.left = root.right root.right = node self.Mirror2(root.left) self.Mirror2(root.right) return root def Mirror3(self,root): if root: # 如果存在根节点 root.left, root.right = root.right, root.left # 根节点左右交换,俩变量交换也可以这样写 self.Mirror(root.left) # 递归调用左节点 self.Mirror(root.right) # 递归调用右节点 return root # 返回节点 else: return # else无节点时直接return def change(self, Node): newNode = TreeNode(Node.val) newNode.left = Node.right newNode.right = Node.left return newNode def FirstBrowse(pRoot): result = [] if pRoot == None: return result else: result.append(pRoot.val) result = result + FirstBrowse(pRoot.left) result = result + FirstBrowse(pRoot.right) return result pRoot8 = TreeNode(8) treeNode6 = TreeNode(6) treeNode10 = TreeNode(10) treeNode5 = TreeNode(5) treeNode7 = TreeNode(7) treeNode9 = TreeNode(9) treeNode11 = TreeNode(11) pRoot8.left = treeNode6 pRoot8.right = treeNode10 treeNode6.left = treeNode5 treeNode6.right = treeNode7 treeNode10.left = treeNode9 treeNode10.right = treeNode11 s = Solution() t = s.Mirror(pRoot8) t2 = s.Mirror2(pRoot8) t3 = s.Mirror2(pRoot8) print FirstBrowse(pRoot8) print FirstBrowse(t) print FirstBrowse(t2) print FirstBrowse(t3)