解法一:分解子问题思维模式的递归法
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func invertTree(root *TreeNode) *TreeNode {
if root == nil{ // 递归退出条件,遍历到空节点
return nil
}
// 翻转左右子树
revLeft := invertTree(root.Left)
revRight := invertTree(root.Right)
// 交换左右子节点
root.Left = revRight
root.Right = revLeft
return root
}
解法二:遍历思维模式的递归法
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func invertTree(root *TreeNode) *TreeNode {
traverse(root)
return root
}
func traverse(root *TreeNode) {
if root == nil{ // 遍历到空节点,退出递归
return
}
// 每个节点需要做的就是交换左右子节点(放在前序和后序位置都可以)
root.Left, root.Right = root.Right, root.Left
traverse(root.Left)
traverse(root.Right)
}