题目

请完成一个函数,输入一个二叉树,该函数输出它的镜像。
image.png

思路

思路一:递归交换左右节点。

思路二
利用栈(或队列)遍历树的所有节点 nodenode ,并交换每个 nodenode 的左 / 右子节点。
算法流程:
特例处理: 当 rootroot 为空时,直接返回 nullnull ;
初始化: 栈(或队列),本文用栈,并加入根节点 rootroot 。
循环交换: 当栈 stackstack 为空时跳出;
出栈: 记为 nodenode ;
添加子节点: 将 nodenode 左和右子节点入栈;
交换: 交换 nodenode 的左 / 右子节点。
返回值: 返回根节点 rootroot 。

链接:https://leetcode-cn.com/problems/er-cha-shu-de-jing-xiang-lcof/solution/mian-shi-ti-27-er-cha-shu-de-jing-xiang-di-gui-fu-/

代码

  1. # Definition for a binary tree node.
  2. # class TreeNode:
  3. # def __init__(self, x):
  4. # self.val = x
  5. # self.left = None
  6. # self.right = None
  7. class Solution:
  8. def mirrorTree(self, root: TreeNode) -> TreeNode:
  9. if root is None:
  10. return
  11. tmp = root.left
  12. root.left = self.mirrorTree(root.right)
  13. root.right = self.mirrorTree(tmp)
  14. return root
  1. if not root: return
  2. stack = [root]
  3. while stack:
  4. node = stack.pop()
  5. if node.left: stack.append(node.left)
  6. if node.right: stack.append(node.right)
  7. node.left, node.right = node.right, node.left
  8. return root
  9. 作者:jyd
  10. 链接:https://leetcode-cn.com/problems/er-cha-shu-de-jing-xiang-lcof/solution/mian-shi-ti-27-er-cha-shu-de-jing-xiang-di-gui-fu-/
  11. 来源:力扣(LeetCode
  12. 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

pythonic的写法
就是不断递归交换左右节点的值

  1. # Definition for a binary tree node.
  2. # class TreeNode:
  3. # def __init__(self, x):
  4. # self.val = x
  5. # self.left = None
  6. # self.right = None
  7. class Solution:
  8. def mirrorTree(self, root: TreeNode) -> TreeNode:
  9. if root is None:
  10. return
  11. root.left, root.right = self.mirrorTree(root.right), self.mirrorTree(root.left)
  12. return root