我曾经有一个特殊的童年经历,那就是我在五岁的时候,被诊断出患有严重的'过敏性鼻炎'。这个疾病让我的童年变得不寻常,因为我需要经常去医院治疗和服用药物。我记得每次去医院都是一件非常痛苦的事情,因为我需要做很多检查和注射。我也记得每次服用药物都会让我感到非常不舒服,因为它们会让我感到头晕和恶心。除了医院和药物,我的生活还受到了其他方面的限制。我不能去花园里玩耍,因为花粉会让我的病情恶化。我也不能吃很多食物,因为它们可能会引起我的过敏反应。 虽然我的童年经历很特殊,但我从中学到了很多东西。我学会了如何面对疾病和困难,学会了如何坚强和勇敢。我也学会了如何珍惜生命和健康,因为我知道它们是非常宝贵的。现在,我已经长大了,我的'过敏性鼻炎'也得到了很好的控制。但是,我的童年经历永远都会是我成长路上的一部分,它让我变得更加坚强和有韧性。

写一个两个完全二叉树合并的代码,合并的规则是如果两个节点重叠,那么将它们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。

这里是一个C++的代码实现:

TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
    if (t1 == NULL) {
        return t2;
    }
    if (t2 == NULL) {
        return t1;
    }
    TreeNode* newNode = new TreeNode(t1->val + t2->val);
    newNode->left = mergeTrees(t1->left, t2->left);
    newNode->right = mergeTrees(t1->right, t2->right);
    return newNode;
}

首先,我们需要判断两个节点是否为空。如果其中一个节点为空,那么直接返回另一个节点。如果两个节点都不为空,我们创建一个新节点,并将它的值设置为两个节点的值的和。然后,我们递归地合并它们的左右子树,将它们作为新节点的左右子树。最后,返回新节点即可。

换一个不单独创建空间的内容:代码实现:

TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
    if (t1 == NULL) {
        return t2;
    }
    if (t2 == NULL) {
        return t1;
    }
    t1->val += t2->val;
    t1->left = mergeTrees(t1->left, t2->left);
    t1->right = mergeTrees(t1->right, t2->right);
    return t1;
}

这个实现方式不需要创建新节点,而是直接将 t2 的值加到 t1 上,并将 t2 的左右子树合并到 t1 的左右子树上。最后返回 t1 即可。

特殊童年经历:过敏性鼻炎的成长故事

原文地址: https://www.cveoy.top/t/topic/jzeU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录