今是昨非

今是昨非

日出江花红胜火,春来江水绿如蓝

合併兩棵二叉樹

演算法_合併兩棵二元樹#

您有兩棵二元樹 root1 和 root2。

想像一下,當您將其中一棵樹放在另一棵樹上時,兩棵樹的一些節點重疊,而其他節點則不重疊。您需要將這兩棵樹合併成一棵新的二元樹。合併規則是如果兩個節點重疊,則將節點值相加作為合併節點的新值。否則,非空節點將用作新樹的節點。

返回合併後的樹。

注意:合併過程必須從兩棵樹的根節點開始。

範例 1:

image1

Input: root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]
Output: [3,4,5,5,4,null,7]

範例 2:

Input: root1 = [1], root2 = [1,2]
Output: [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
    }
}

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。