LCR 175. 计算二叉树的深度

LCR 175. 计算二叉树的深度

LCR 175

dfs解法

cpp 复制代码
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
// 思路 :
// 一个树的最大深度=1+max(左子树的最大深度,右子树的最大深度)   
// 这个1是它root这一层
int dfs(TreeNode*root){
    if(root==nullptr)return 0;//如果递归到了叶子节点的子树了,返回0
    return max(dfs(root->left),dfs(root->right) )+1;
}
public:
    int calculateDepth(TreeNode* root) {
        if(root==nullptr)return 0;///如果是空树,返回0
        return max(dfs(root->left),dfs(root->right) )+1;
    }
};

优化一下

cpp 复制代码
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    int calculateDepth(TreeNode* root) {
        if(root==nullptr)return 0;
        return max(calculateDepth(root->left),calculateDepth(root->right) )+1;
    }
};

bfs解法

cpp 复制代码
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    int calculateDepth(TreeNode* root) {
        if(root==nullptr)return 0;//如果是空树,返回0
        int level=0;//当前层
        vector<TreeNode*>que;//队列
        que.push_back(root);
        while(!que.empty() ){//当前曾不是空层
            vector<TreeNode*>tmp;//存储当前层的下一层节点
            level++;
            for(TreeNode*it:que){//遍历当前层的下一层节点
                if(it->left!=nullptr)tmp.push_back(it->left);
                if(it->right!=nullptr)tmp.push_back(it->right);
            }
            que=tmp;//队列来到新的一层    
        }
        return level;//返回层数
    }
};
相关推荐
sali-tec1 分钟前
C# 基于OpenCv的视觉工作流-章75-线-线角度
图像处理·人工智能·opencv·算法·计算机视觉
大熊背11 分钟前
Binning模式下和Normal模式下加权平均亮度差异分析以及优化
人工智能·算法·自动曝光
思茂信息11 分钟前
CST案例:可调谐全硅手性超表面在太赫兹频段
网络·人工智能·算法·重构·cst·电磁仿真
呃呃本31 分钟前
算法题(动态规划)
算法·动态规划
pen-ai41 分钟前
Kennard-Stone (KS) 算法详解 —— 从实验设计到样本划分的经典方法
人工智能·算法·机器学习
开压路机1 小时前
数据结构:图
数据结构·算法
小白|1 小时前
cann-learning-hub:昇腾CANN社区学习中心完全指南
java·c++·算法
kobesdu1 小时前
当算法跑不通时:3D激光SLAM工程实践中的隐藏陷阱与全链路排查
算法·3d
金创想1 小时前
积木移动题目分析及解题思路——木块问题(1)
c++·算法·字符串·c·刷题·信息学奥赛·积木
研究点啥好呢1 小时前
小鹏汽车 机器人运动规划算法工程师 面试题精选:10道高频考题+答案解析
算法·机器人·汽车