返回
深入浅出理解二叉树翻转,LeetCode 题解大揭秘
IOS
2023-09-28 07:04:37
引言
在计算机科学中,二叉树是一种重要的数据结构,广泛用于各种应用程序中。翻转二叉树是一种常见的操作,它涉及将树中每个节点的左子树和右子树交换。本文将重点介绍二叉树翻转的原理,并提供一个用 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 语言实现二叉树翻转。通过深入理解算法和示例代码,你可以提高自己的编程技能,解决更复杂的数据结构问题。