返回

深入浅出理解二叉树翻转,LeetCode 题解大揭秘

IOS

引言

在计算机科学中,二叉树是一种重要的数据结构,广泛用于各种应用程序中。翻转二叉树是一种常见的操作,它涉及将树中每个节点的左子树和右子树交换。本文将重点介绍二叉树翻转的原理,并提供一个用 Swift 语言编写的 LeetCode 题解。

二叉树翻转算法

二叉树翻转可以使用递归算法来实现。递归是一种强大的编程技术,它允许函数调用自身来解决问题。在二叉树翻转的上下文中,我们可以定义一个递归函数 flip(_:),它接收一个二叉树节点作为输入,并返回翻转后的二叉树。

func flip(_ root: BinaryNode<Int>?) -> BinaryNode<Int>? {
    // 递归基线情况:如果节点为 nil,则返回 nil
    guard let root = root else { return nil }

    // 交换左右子树
    let left = flip(root.left)
    let right = flip(root.right)
    root.left = right
    root.right = left

    // 返回翻转后的节点
    return root
}

Swift LeetCode 题解

LeetCode 是一个流行的在线算法练习平台。其中一道与二叉树翻转相关的题目是 "Invert Binary Tree"。我们可以使用上面介绍的递归算法来解决这道题。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     public var val: Int
 *     public var left: TreeNode?
 *     public var right: TreeNode?
 *     public init() { self.val = 0; self.left = nil; self.right = nil; }
 *     public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; }
 *     public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
 *         self.val = val
 *         self.left = left
 *         self.right = right
 *     }
 * }
 */
class Solution {
    func invertTree(_ root: TreeNode?) -> TreeNode? {
        guard let root = root else { return nil }

        // 交换左右子树
        let left = invertTree(root.left)
        let right = invertTree(root.right)
        root.left = right
        root.right = left

        // 返回翻转后的树
        return root
    }
}

结论

二叉树翻转是一个基本的数据结构操作,在各种编程场景中都有应用。通过使用递归算法,我们可以有效地翻转二叉树。本文提供的 LeetCode 题解演示了如何使用 Swift 语言实现二叉树翻转。通过深入理解算法和示例代码,你可以提高自己的编程技能,解决更复杂的数据结构问题。