在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 let 和 if let)来检查节点是否存在,并在必要时返回有效值或空值。