226. 翻转二叉树 简单

翻转一棵二叉树。

示例:

输入:

     4
   /   \
  2     7
 / \   / \
1   3 6   9

输出:

     4
   /   \
  7     2
 / \   / \
9   6 3   1

备注:
这个问题是受到 Max Howell 的 原问题 启发的 :

谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。

代码参考:

package main

import "fmt"

func main() {
    tree := &Tree{}
    tree.root = &TreeNode{Val: 4}
    for _, v := range []int{2, 7, 1, 3, 6, 9} {
        tree.BFSInsert(v)
    }
    tree.BFSTraverse(tree.root) // 4 2 7 1 3 6 9
    fmt.Println()
    invertTree(tree.root)
    tree.BFSTraverse(tree.root) // 4 7 2 9 6 3 1
}

// 反转二叉树其实是镜像翻转 swap 节点操作
func invertTree(root *TreeNode) *TreeNode {
    if root == nil {
        return nil
    }

    invertTree(root.Left)
    invertTree(root.Right)

    swapNode := root.Left // 镜像翻转
    root.Left = root.Right
    root.Right = swapNode
    return root
}
最后编辑: kuteng  文档更新时间: 2021-06-05 10:16   作者:kuteng