226 翻转二叉树-中等

题目:

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。

解题思路

  • DFS,详见解法1。具体是直接深度优先搜索,修改每个节点的左右指针。

  • BFS,详见解法2。将节点加入队列,依次翻转队列中每个节点的左右指针。

// date 2023/12/28
/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
// 解法1 dfs
func invertTree(root *TreeNode) *TreeNode {

    var dfs func(root *TreeNode)
    dfs = func(root *TreeNode) {
        if root == nil {
            return
        }
        or := root.Right
        root.Right = root.Left
        root.Left = or

        dfs(root.Right)
        dfs(root.Left)
    }

    dfs(root)

    return root
}

// 解法2
// BFS
func invertTree(root *TreeNode) *TreeNode {
    if root == nil {
        return root
    }
    if root.Left == nil && root.Right == nil {
        return root
    }

    queue := make([]*TreeNode, 0, 16)
    queue = append(queue, root)

    for len(queue) != 0 {
        n := len(queue)
        for i := 0; i < n; i++ {
            cur := queue[i]
            or := cur.Right
            cur.Right = cur.Left
            cur.Left = or

            if cur.Left != nil {
                queue = append(queue, cur.Left)
            }
            if cur.Right != nil {
                queue = append(queue, cur.Right)
            }
        }

        queue = queue[n:]
    }

    return root
}

最后更新于