首页 > 编程语言 >代码随想录算法训练营第十四天| 226.翻转二叉树 、101. 对称二叉树、104.二叉树的最大深度 (优先掌握递归)、111.二叉树的最小深度

代码随想录算法训练营第十四天| 226.翻转二叉树 、101. 对称二叉树、104.二叉树的最大深度 (优先掌握递归)、111.二叉树的最小深度

时间:2024-07-05 12:57:29浏览次数:21  
标签:node res 第十四天 que 二叉树 深度 root size

二叉树学习2

226题翻转二叉树,改一下前序递归遍历,每次遍历的时候都调换一下左右结点即可。

class Solution {
public:
void preorder(TreeNode *root) {
        if (root == nullptr) {
            return;
        }
        TreeNode* tmp;
        tmp = root->left;
        root->left = root->right;
        root->right = tmp;
        preorder(root->left);
        preorder(root->right);
    }
    TreeNode* invertTree(TreeNode* root) {
        preorder(root);
        return root;
    }
};

101判定是不是对称二叉树,我的做法太麻烦了,对两棵树分别遍历(中左右 中右左),再比较值是否相同,其实可以放在一个函数里一次性解决。

class Solution {
public:
    void preorder1(TreeNode *root, vector<int> &res) {
        if (root == nullptr) {
            res.push_back(-101);
            return;
        }
        res.push_back(root->val);
        preorder1(root->left, res);
        preorder1(root->right, res);
    }
    void preorder2(TreeNode *root, vector<int> &res) {
        if (root == nullptr) {
            res.push_back(-101);
            return;
        }
        res.push_back(root->val);
        preorder2(root->right, res);
        preorder2(root->left, res);

    }
    bool isSymmetric(TreeNode* root) {
        
        vector<int> res;
        vector<int> ans;
       
        preorder1(root->left, res);
        preorder2(root->right, ans);
        
        // 比较两个数组
        for (int i = 0; i < res.size(); i++) {
            if (res[i] != ans[i])  
                return false;
        }
        return true;
    }
};

104题二叉树的最大深度 111题二叉树的最小深度在上一节完成了

class Solution {
public:
    int maxDepth(TreeNode* root) {
        queue<TreeNode*> que;
        if (root != NULL) que.push(root);
        vector<vector<int>> result;
        int depth = 0;
        while (!que.empty()) {
            int size = que.size();
            vector<int> vec;
            // 这里一定要使用固定大小size,不要使用que.size(),因为que.size是不断变化的
            for (int i = 0; i < size; i++) {
                TreeNode* node = que.front();
                que.pop();
                vec.push_back(node->val);
                if (node->left) que.push(node->left);
                if (node->right) que.push(node->right);
            }
            result.push_back(vec);
            depth++;
        }
        return depth;
    }
};
class Solution {
public:
    int minDepth(TreeNode* root) {
        if (!root) {
            return 0;
        }
        queue<TreeNode*> que;
        que.push(root);
        
        int depth = 0;

        while (!que.empty()) {
            int size = que.size();
            vector<int> vec;
            // 这里一定要使用固定大小size,不要使用que.size(),因为que.size是不断变化的
            for (int i = 0; i < size; i++) {
                TreeNode* node = que.front();
                que.pop();
                vec.push_back(node->val);
                if (!node->left && !node->right) {
                    return ++depth;
                }
                if (node->left) que.push(node->left);
                if (node->right) que.push(node->right);
            }
            depth++;
        }
        return depth;
    }
};

标签:node,res,第十四天,que,二叉树,深度,root,size
From: https://www.cnblogs.com/zhuyishao/p/18285593

相关文章

  • 第13篇:深度学习中的情感分析与情感生成
    情感分析与情感生成是自然语言处理(NLP)中的重要任务。情感分析通过识别文本中的情感,帮助我们理解用户的情绪状态。情感生成则通过生成带有特定情感的文本,提升人机交互的自然性和人性化。本文将深入讲解情感分析的基本方法及如何实现情感生成,并通过具体的Python代码示例展示实......
  • 【超万卡GPU集群关键技术深度分析 2024】
    文末有福利!1.集群高能效计算技术随着大模型从千亿参数的自然语言模型向万亿参数的多模态模型升级演进,超万卡集群吸需全面提升底层计算能力。具体而言,包括增强单芯片能力、提升超节点计算能力、基于DPU(DataProcessingUnit)实现多计算能力融合以及追求极致算力能效......
  • 深度学习难不难学?为什么说深度学习入门难
    前言深度学习对于初学者可能会有一定的学习曲线,但并不是不可战胜的难题。深度学习难不难学?通过合适的学习资源、坚持不懈的努力和实际项目的实践,你可以逐渐掌握深度学习的技能。深度学习的重要性和广泛应用性使得克服学习难度是非常值得的。深度学习之所以被认为难学,主要......
  • 深度学习怎么学?10步快速入门深度学习
    前言深度学习是一个快速发展的领域,不断更新的技术和方法需要持续的学习和适应。学习深度学习需要不断学习和实践,以及积极参与社区和领域内的讨论。深度学习怎么学?学习深度学习需要一定的时间、资源和方法。以下是学习深度学习的一些建议步骤:学好基础数学:深度学习需要一......
  • 深度网络现代实践 - 深度前馈网络之反向传播和其他的微分算法篇
    序言反向传播(Backpropagation,简称backprop)是神经网络训练过程中最关键的技术之一,尤其在多层神经网络中广泛应用。它是一种与优化方法(如梯度下降法)结合使用的算法,用于计算网络中各参数的梯度,进而通过调整这些参数来最小化损失函数,从而提高模型的预测准确性和泛化能力。微分......
  • 基于深度学习的动画渲染
    基于深度学习的动画渲染是一项利用深度学习技术来提高动画制作效率和质量的前沿研究领域。该技术旨在通过深度学习模型加速动画渲染过程,优化图像质量,并实现复杂效果的自动化生成。以下是关于这一领域的系统介绍:1.任务和目标动画渲染的主要任务是将3D模型、场景和动画转换为......
  • 基于深度学习的碰撞模拟
    基于深度学习的碰撞模拟是一项利用深度学习技术来模拟和预测物体碰撞行为的前沿研究领域。这项技术广泛应用于计算机图形学、虚拟现实、物理仿真、游戏开发和工程设计等领域,能够提高碰撞检测和响应的精度和效率。以下是关于这一领域的系统介绍:1.任务和目标碰撞模拟的主要任......
  • 大数据领域的深度分析——AI是在帮助开发者还是取代他们?
    在大数据领域,生成式人工智能(AIGC)的应用正在迅速扩展,改变了数据科学家和开发者的工作方式。本文将从大数据的专业视角,探讨AI工具在这一领域的作用,以及它们是如何帮助开发者而非取代他们的。1.大数据领域的AI工具现状在大数据领域,AI工具已经取得了显著进展,以下是几款主要......
  • 深度分析:Maven在软件构建管理中的地位与选型指南
    引言在现代软件开发中,构建管理工具扮演着至关重要的角色。它们不仅简化了构建过程,还提高了构建的可重复性和可靠性。ApacheMaven是其中的佼佼者,但它并不是唯一的选择。本文将详细分析Maven,比较其与其他同类工具的优缺点,探讨其使用场景,并提供选型和使用建议。什么是Ma......
  • 一文为你深度解析LLaMA2模型架构
    本文分享自华为云社区《【云驻共创】昇思MindSpore技术公开课大咖深度解析LLaMA2模型架构》,作者:Freedom123。一、前言随着人工智能技术的不断发展,自然语言处理(NLP)领域也取得了巨大的进步。在这个领域中,LLaMA展示了令人瞩目的性能。今天我们就来学习LLaMA2模型,我们根据 昇思M......