题目描述:给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。
代码:
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;
}
};