力扣HOT100(33)二叉树的最大深度

方法一:深度优先搜索(递归法,面试首选)

1. 核心思路(分治思想)

二叉树的深度有一个铁律

当前节点的深度 = max (左子树深度,右子树深度) + 1

  • 先算左子树的最大深度
  • 再算右子树的最大深度
  • 取两者的最大值,加上当前节点本身(+1),就是当前节点的深度
  • 递归终止条件:空节点的深度为 0(没有节点,深度就是 0)

这个思路本质是后序遍历:先处理左子树,再处理右子树,最后处理当前节点。

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 maxDepth(TreeNode* root) {
        //递归

        //为空 就返回
        if(root == nullptr) return 0;

        //否则就一直左子树 右字数遍历
        return max(maxDepth(root->left),maxDepth(root->right))+1;
        
    }
};

方法二:广度优先搜索(层序遍历法,面试进阶)

1. 核心思路

层序遍历就是一层一层地遍历树,每遍历完一层,深度就加 1。

  • 用队列存储当前层的所有节点
  • 每次先记录当前队列的大小(也就是当前层的节点数)
  • 一次性把当前层的所有节点都处理完,把它们的左右孩子入队
  • 处理完一层,深度加 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 maxDepth(TreeNode* root) {
       //层序 BFS 广度优先搜索

       //仍然是如果根为空 直接返回
       if(root == nullptr) return 0;
       queue<TreeNode *> Q;//创建一个队列
       Q.push(root);//把当前的根入队
       int ans = 0;
       while(!Q.empty()){
        //循环条件:Q队列不为空
        int sz = Q.size();
        while(sz>0){
            TreeNode* node = Q.front();//最先入队的存到node中
            Q.pop();// 弹出队首
            if(node->left){
                Q.push(node->left);
            }
            if(node->right){
                Q.push(node->right);
            }
            sz -=1
        }
        ans += 1;
       }
       return ans;

    }
};
相关推荐
wabs66631 分钟前
关于图论【卡码网110.字符串迁移的思考】
数据结构·算法·图论
hanlin031 小时前
刷题笔记:力扣第242、349题(哈希表)
笔记·算法·leetcode
only-qi2 小时前
大模型Agent面试攻略:落地工程痛点、评估体系与Agentic RAG核心精讲
人工智能·算法·面试·职场和发展·langchain·rag
数字宝藏2 小时前
15本电子书分享
职场和发展·职场发展·教育电商
Gauss松鼠会4 小时前
【GaussDB】GaussDB锁阻塞源头查询
java·开发语言·前端·数据库·算法·gaussdb·经验总结
oier_Asad.Chen4 小时前
【洛谷题解/AcWing题解】洛谷P4011 孤岛营救问题/AcWing1131拯救大兵瑞恩
数据结构·笔记·学习·算法·动态规划·图论·宽度优先
逻辑君4 小时前
基于 A2C 算法的双足机器人行走控制
人工智能·深度学习·算法·机器学习·机器人
冻柠檬飞冰走茶5 小时前
PTA基础编程题目集 7-19 支票面额(C语言实现)
c语言·开发语言·数据结构·算法
船漏了就会沉5 小时前
状态压缩DP:小数据下的“暴力美学”
算法
你怎么知道我是队长5 小时前
计算机虚拟存储管理与页面置换算法详解
服务器·网络·算法