前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Algorithem_Merge Two Binary Trees

Algorithem_Merge Two Binary Trees

原创
作者头像
莫空9081
发布2022-04-21 12:10:00
1610
发布2022-04-21 12:10:00
举报
文章被收录于专栏:iOS 备忘录iOS 备忘录

You are given two binary trees root1 and root2.

Imagine that when you put one of them to cover the other, some nodes of the two trees are overlapped while the others are not. You need to merge the two trees into a new binary tree. The merge rule is that if two nodes overlap, then sum node values up as the new value of the merged node. Otherwise, the NOT null node will be used as the node of the new tree.

<!--more-->

Return the merged tree.

Note: The merging process must start from the root nodes of both trees.

Example 1:

image1
image1
代码语言:Swift
复制
Input: root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]
Output: [3,4,5,5,4,null,7]

Example 2:

代码语言:Swift
复制
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)

代码如下:

代码语言:Swift
复制
/**
 * 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
    }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 解法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档