力扣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;
    }
}
相关推荐
tellmewhoisi19 分钟前
多版本共用redis的token有效期校验(过期重新登录)
java·redis·缓存
疯狂打码的少年20 分钟前
【软件工程】结构化设计:模块独立性与耦合内聚
java·开发语言·笔记·软件工程
乐观的Terry25 分钟前
3、数据库设计与领域实体
java·数据库·spring boot·spring cloud·ai编程
卡提西亚38 分钟前
leetcode-1438. 绝对差不超过限制的最长连续子数组
算法·leetcode·职场和发展
Java面试题总结1 小时前
LeetCode 93.复原IP地址
算法·leetcode·职场和发展·.net
C++、Java和Python的菜鸟1 小时前
第4章 后端Web基础(基础知识)
java·开发语言
芷栀夏1 小时前
Java教育平台实战复盘:课程、考试与学习行为分析系统设计
java·开发语言·学习
维基框架2 小时前
维基框架(Wiki-Framework) 1.2.0:Mybatis 升级为主从读写分离
java·后端·架构
Memory_荒年2 小时前
Java函数式接口:把代码变成“拼乐高”的快乐,你体验过吗?
java
Memory_荒年2 小时前
WebSocket:让服务器学会“主动搭讪”的黑科技
java