LeetCode226 翻转二叉树

56 阅读1分钟

leetcode.cn/problems/in…

image.png

解法一:分解子问题思维模式的递归法

/**
 * 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)
}