合併兩個二叉樹的算法#
給定兩個二叉樹 root1 和 root2。
假設將其中一個樹放在另一個樹的上方時,兩棵樹的某些節點會重疊,而其他節點則不會。你需要將這兩棵樹合併為一棵新的二叉樹。合併的規則是,如果兩個節點重疊,則將節點值相加作為合併節點的新值。否則,使用非空節點作為新樹的節點。
返回合併後的樹。
注意:合併過程必須從兩棵樹的根節點開始。
示例 1:
輸入:root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]
輸出:[3,4,5,5,4,null,7]
示例 2:
輸入:root1 = [1], root2 = [1,2]
輸出:[2,2]
解法#
使用遞歸,從上面的例子可以看出,基本計算是兩個值相加,如果其中一個為 null,則與 0 相加。
代碼邏輯:
聲明一個新的 TreeNode,TreeNode 的 val = root1.val + root2.val,TreeNode 的 left = 遞歸 (root1.left, roo2.left),right = 遞歸 (root1.right, root2.right)
代碼如下:
/**
* 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 mergeTrees(_ root1: TreeNode?, _ root2: TreeNode?) -> TreeNode? {
if root1 == nil && root2 == nil {
return nil
}
let valValue = (root1 == nil ? 0 : root1!.val) + (root2 == nil ? 0 : root2!.val)
let newNode = TreeNode(valValue)
newNode.left = mergeTrees(root1?.left, root2?.left)
newNode.right = mergeTrees(root1?.right, root2?.right)
return newNode
}
}