题解 | #合并二叉树#
合并二叉树
https://www.nowcoder.com/practice/7298353c24cc42e3bd5f0e0bd3d1d759
非递归层次遍历,改造树tree1:
class Solution {
public:
TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
// write code here
if(!t1) return t2;
if(!t2) return t1;
TreeNode *p=t1,*q=t2;
queue<pair<TreeNode*,TreeNode*>> qu;
qu.emplace(p,q);
p->val+=q->val;
while(qu.size()){
int n=qu.size();
for(int i=0;i<n;i++){
auto[I,J]=qu.front();
qu.pop();
if(I->left && J->left){//当前子节点都存在时,节点和给t1
I->left->val+=J->left->val;
qu.emplace(I->left,J->left);
}
else if(J->left){//只有t2子节点时,创建新节点给t1
TreeNode *s=(TreeNode*)malloc(sizeof(TreeNode));
s->val=J->left->val;
s->left=s->right=NULL;
I->left=s;
qu.emplace(I->left,J->left);
}//只要t2没有左或右子节点,即使t1有,t1节点也不入队
if(I->right && J->right){
I->right->val+=J->right->val;
qu.emplace(I->right,J->right);
}
else if(J->right){
TreeNode *s=(TreeNode*)malloc(sizeof(TreeNode));
s->val=J->right->val;
s->left=s->right=NULL;
I->right=s;
qu.emplace(I->right,J->right);
}
}
}
return t1;
}
};

