题解 | #合并二叉树#

合并二叉树

https://www.nowcoder.com/practice/7298353c24cc42e3bd5f0e0bd3d1d759

代码看起来有点繁琐了,主要是结点为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;
    }
};

全部评论
知道该用递归,但感觉递归过于偷懒了。。。
点赞 回复 分享
发布于 2024-06-13 18:51 北京

相关推荐

给🐭🐭个面试机会...:我擦seed✌🏻
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务