代码看起来有点繁琐了,主要是结点为None的情况无法放在加法的过程中去考虑,因为这样无法让None指针接收另一个指针的节点值,所以得从none结点的父节点就要考虑none这种情况。

/**
 * struct TreeNode {
 *  int val;
 *  struct TreeNode *left;
 *  struct TreeNode *right;
 *  TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param t1 TreeNode类
     * @param t2 TreeNode类
     * @return TreeNode类
     */
    void addTreeNode(TreeNode* t1, TreeNode* t2) {
        if (t1 && t2) t1->val += t2->val;
    }
    TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
        // write code here
        if (!t1 && !t2) return t1;
        if (!t1) t1 = new TreeNode(0);
        if (!t2) t2 = new TreeNode(0);
        vector<TreeNode*> query;
        query.push_back(t1);
        query.push_back(t2);
        TreeNode* tmp1, * tmp2;
        while (!query.empty()) {
            tmp1 = query[0];
            tmp2 = query[1];
            addTreeNode(tmp1, tmp2);
            query.erase(query.begin(), query.begin() + 2);

            if (!tmp1->left && tmp2->left) tmp1->left = new TreeNode(0);
            if (!tmp2->left && tmp1->left) tmp2->left = new TreeNode(0);
            if (!tmp1->right && tmp2->right) tmp1->right = new TreeNode(0);
            if (!tmp2->right && tmp1->right) tmp2->right = new TreeNode(0);
            if (tmp1->left && tmp2->left) {
                query.push_back(tmp1->left);
                query.push_back(tmp2->left);
            }
            if (tmp1->right && tmp2->right) {
                query.push_back(tmp1->right);
                query.push_back(tmp2->right);
            }

        }
        return t1;
    }
};