• 力扣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

    
    /**
     * 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;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    BFS

    
    /**
     * 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;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
  • 相关阅读:
    DOCKER安装RABBITMQ集群
    LVGL中LV_SCROLL_SNAP_CENTER宏的作用
    【附源码】计算机毕业设计SSM商品测试应用管理系统
    java基于springboot的毕业生简历模板分享管理系统
    Golang一日一库之regex
    动作捕捉系统用于苹果采摘机器人
    HTML+CSS+JS大作业:网站设计——家具装修公司(12页 bootstrap, 响应式)
    什么是架构
    echo tail 与 重定向符
    ElasticSearch第二讲:ES详解 - ElasticSearch基础概念
  • 原文地址:https://blog.csdn.net/LNsupermali/article/details/134471700