LeetCode HOT100 - 合并二叉树

假设我们有了这个目标树的框架

那么这个树的左子树和右子树是独立地由要合并的树的左子树和右子树去完成

因此整体的方案是递归

不断去处理子树

如果当前一个是空,一个有非空,那么直接把非空的接过来就可以

否则的话要么就是空节点不继续向下做,要么就是把 val 合并,然后向下操作

/**
 * Definition for a binary tree node.
 * 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) {
        auto merge = [&](this auto&& self, TreeNode* x, TreeNode* y) -> TreeNode*{
            if (x && !y) {
                return x;
            }
            if (y && !x) {
                return y;
            }
            if (!x && !y) {
                return nullptr;
            }
            TreeNode* res = new TreeNode();
            res->val = x->val + y->val;
            res->left = self(x->left, y->left);
            res->right = self(x->right, y->right);
            return res;
        };
        return merge(root1, root2);
    }
};
posted @ 2026-05-05 22:19  rdcamelot  阅读(10)  评论(0)    收藏  举报