题目描述:给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/5a0862f95ec8984d2d00bd77dad8d1e0.png)
解题思路:(1)为两颗二叉树建两个对应的栈 (2)比较两颗二叉树根节点的左右孩子(3)如果二叉树的左右孩子一个值为空另一个值非空,取非空的值;如果左右孩子都非空,两个孩子入栈
代码
class Solution {
public:
TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
if(t2==NULL)
return t1;
if(t1==NULL)
return t2;
TreeNode*res = t1;
stack<TreeNode*>s1,s2;
s1.push(t1),s2.push(t2);
while(!s1.empty()){
TreeNode*c1=s1.top();
TreeNode*c2=s2.top();
s1.pop(),s2.pop();
c1->val=c1->val + c2->val;
if(c1->right==NULL&&c2->right!=NULL)
c1->right=c2->right;
else if(c1->right!=NULL&&c2->right!=NULL)
s1.push(c1->right),s2.push(c2->right);
if(c1->left==NULL&&c2->left!=NULL)
c1->left=c2->left;
else if(c1->left!=NULL&&c2->left!=NULL)
s1.push(c1->left),s2.push(c2->left);
}
return res;
}
};