力扣104. 二叉树的最大深度(java,DFS,BFS解法)

Problem: 104. 二叉树的最大深度

文章目录

思路和解法

DFS

递归处理,退出条件为节点为空,归的过程每次取出当前节点左右子树的最大深度加一

BFS

经典的借助一个队列实现的BFS,用一个变量记录当前的最大层数,在循环实现出队当前节点和添加当前层节点的下一层后将最大层数加一

复杂度

DFS

  • 时间复杂度:

O ( n ) O(n) O(n)

  • 空间复杂度:

O ( n ) O(n) O(n)

BFS

  • 时间复杂度:

O ( n ) O(n) O(n)

  • 空间复杂度:

O ( n ) O(n) O(n)

Code

DFS

java 复制代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    //DFS
    //Time Complexity: O(n)
    //Space Complexity: O(n) 
    public int maxDepth(TreeNode root) {
        //退出条件
        if (root == null) return 0;
        return Math.max(maxDepth(root.left),maxDepth(root.right)) + 1;
    }
}

BFS

java 复制代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    //BFS
    //Time Complexity: O(n)
    //Space Complexity: O(n)
    public int maxDepth(TreeNode root) {
        if (root == null) return 0;
        Queue<TreeNode> queue = new LinkedList<>();
        List<Integer> res = new ArrayList<>();
        queue.add(root);
        //记录层数
        int level = 0;
        while (!queue.isEmpty()) {
            int curLevelSize = queue.size();
            for (int i = 0;i < curLevelSize; ++i) {
                TreeNode curLevelNode = queue.poll();
                if (curLevelNode.left != null) {
                    queue.add(curLevelNode.left);
                }
                if (curLevelNode.right != null) {
                    queue.add(curLevelNode.right);
                }
            }
            //层数加一
            level++;
        }
        return level;
    }
}
相关推荐
逻辑驱动的ken5 分钟前
Java高频面试考点场景题22
java·开发语言·jvm·面试·职场和发展·求职招聘·春招
m0_629494736 分钟前
LeetCode 热题 100-----18.矩阵置零
数据结构·leetcode·矩阵
小则又沐风a11 分钟前
list模拟实现
java·服务器·list
上弦月-编程14 分钟前
C语言链表详解,新手也能看懂! ——从入门到精通的完整教程
java·c语言·c++
ffqws_27 分钟前
Spring Boot 配置读取全解析:从 application.yml 到 Java 对象的完整链路
java·数据库·spring boot
clear sky .28 分钟前
【TCP】TCP数据粘包/分包问题
java·服务器·网络
阿Y加油吧28 分钟前
二刷 LeetCode:两道经典贪心题复盘
算法·leetcode·职场和发展
云烟成雨TD29 分钟前
Spring AI 1.x 系列【29】Embedding Model(嵌入模型)
java·人工智能·spring
Java成神之路-32 分钟前
【LeetCode 刷题笔记】35. 搜索插入位置 | 二分查找经典入门题
算法·leetcode
幸福巡礼38 分钟前
【 LangChain 1.2 实战(四)】构建一个模块化的天气查询 Agent
java·前端·langchain