Skip to content

Latest commit

 

History

History
43 lines (34 loc) · 953 Bytes

27. 二叉树的镜像.md

File metadata and controls

43 lines (34 loc) · 953 Bytes

解题思路

遍历过程中翻转该节点的左右子树 使用前序和后序遍历都能做,唯独中序遍历不可以 因为中序遍历处理顺序是左根右,处理时:

  1. 处理左儿子
  2. 处理根,将左儿子换到右边成为右儿子
  3. 处理右儿子,其实这个右儿子就是第 1 步已经被处理过的左儿子

相当于原来的左儿子被处理了两次,而右儿子没被处理过

1. 前序遍历

func mirrorTree(root *TreeNode) *TreeNode {
    if root == nil {
        return root
    }
    root.Left, root.Right = root.Right, root.Left
    mirrorTree(root.Left)
    mirrorTree(root.Right)
    return root
}

2. 后序遍历

func mirrorTree(root *TreeNode) *TreeNode {
    if root == nil {
        return root
    }
    l := mirrorTree(root.Left)
    r := mirrorTree(root.Right)
    root.Left, root.Right = r, l
    return root
}