Swift 合并两个二叉树

257 阅读1分钟

在Swift中合并两个二叉树,可以通过递归实现。下面是一个基本的实现:

class TreeNode {
    var val: Int
    var left: TreeNode?
    var right: TreeNode?

    init(_ val: Int) {
        self.val = val
    }
}

func mergeTrees(_ t1: TreeNode?, _ t2: TreeNode?) -> TreeNode? {
    guard let t1 = t1 else {
        return t2
    }
    guard let t2 = t2 else {
        return t1
    }
  
    let node = TreeNode(t1.val + t2.val)
    node.left = mergeTrees(t1.left, t2.left)
    node.right = mergeTrees(t1.right, t2.right)
    
    return node
}

上述代码中,定义了一个 TreeNode 类表示二叉树的每一个节点。mergeTrees 方法用于合并给定的两个二叉树,并返回一个新的二叉树,该方法重载了两个参数:第一个二叉树和第二个二叉树。

在实现中,我们使用递归来合并两个二叉树。如果两个节点都不为空,则创建一个新的节点,并将其值设置为两个节点值的和。然后,递归地合并它们的左子树和右子树,并将其分别赋值给新节点的左子节点和右子节点。

如果其中一个节点是空,则直接返回另一个节点本身(如果存在)作为新节点的子树。最终,返回新的根节点作为合并后的二叉树。

需要注意的是,由于 Swift 是一门强类型语言,因此不能将一个节点(或任何其他对象)直接设置为 nil。而是使用 Optional 类型来表示可能为空的值。在上述代码中,我们使用了可选绑定(guard letif let)来检查节点是否存在,并在必要时返回有效值或空值。