码迷,mamicode.com
首页 > 其他好文 > 详细

合并二叉树(leetcode-617)

时间:2021-07-01 17:20:51      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:struct   示例   lang   网站   必须   ++   另一个   关注   规则   

题目

给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。

你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。

示例网站上看吧。

注意: 合并必须从两个树的根节点开始

思路

递归求解。只要两棵树的根节点不为空,那么就可以分解为左子树和右子树两个独立的问题。如果有空的根节点,那么直接返回另一个即可。如果两个都是空就返回空。

代码

struct TreeNode
{
    int val;
    TreeNode *left;
    TreeNode *right;

    TreeNode()
        : val(0), left(nullptr), right(nullptr)
    {}

    TreeNode(int x)
        : val(x), left(nullptr), right(nullptr)
    {}

    TreeNode(int x, TreeNode *left, TreeNode *right)
        : val(x), left(left), right(right)
    {}
};

class Solution
{
public:
    TreeNode *mergeTrees(TreeNode *root1, TreeNode *root2)
    {
        if (root1 == nullptr and root2 == nullptr) return nullptr;
        else if (root1 == nullptr) return root2;
        else if (root2 == nullptr) return root1;
        else {
            TreeNode* l = mergeTrees(root1->left, root2->left);
            TreeNode* r = mergeTrees(root1->right, root2->right);
            return new TreeNode(root1->val += root2->val, l, r);
        }
    }
};

代码解释

我们的注意力放在当前指向的节点本身,不关注这个节点的左右节点。

合并二叉树(leetcode-617)

标签:struct   示例   lang   网站   必须   ++   另一个   关注   规则   

原文地址:https://www.cnblogs.com/destinyzk/p/14958236.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!