题解 | #合并二叉树#

合并二叉树

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;
    }
};


全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务