遍历过程中翻转该节点的左右子树 使用前序和后序遍历都能做,唯独中序遍历不可以 因为中序遍历处理顺序是左根右,处理时:
- 处理左儿子
- 处理根,将左儿子换到右边成为右儿子
- 处理右儿子,其实这个右儿子就是第 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
}
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
}