文章目录
Leetcode617
1.问题描述
2.解决方案
解法一:递归
这个思路很简单没什么好说的,就是递归处理两棵树的左右子树
1.首先我都不用管题目,参数有两个指针应该怎么处理不用我多说了吧,两个指针总共四种情况,空不空,不空空,空空,不空不空,都列出来分别处理,那要是带到题目分析那也和简单就是一个空了那直接返回另一个不就是合并了
if(root1== nullptr&&root2== nullptr) return nullptr;
if(root1!= nullptr&&root2== nullptr) return root1;
if(root1== nullptr&&root2!= nullptr) return root2;
2.我是建立了一颗新树其实不建立就用其中一颗也可以,然后递归左右子树就没什么可说的了
class Solution {
public:
TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
if(root1== nullptr&&root2== nullptr) return nullptr;
if(root1!= nullptr&&root2== nullptr) return root1;
if(root1== nullptr&&root2!= nullptr) return root2;
TreeNode* root=new TreeNode(root1->val+root2->val);
root->left= mergeTrees(root1->left,root2->left);
root->right= mergeTrees(root1->right,root2->right);
return root;
}
};
解法二:迭代
迭代的处理类似于101. 对称二叉树 ,就是使用栈或者队列把两棵树的两个结点同时入队,然后同时出队进行比较处理,这我就不给出了,可以回顾一下101. 对称二叉树 这篇博客就懂了!