• [LeetCode] 104. 二叉树的最大深度


    传送门:[LeetCode] 104. 二叉树的最大深度

    题目描述

    给定一个二叉树,找出其最大深度。

    二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

    说明: 叶子节点是指没有子节点的节点。

    示例 :

    给定二叉树 [3,9,20,null,null,15,7]

        3
       / 
      9  20
        /  
       15   7
    

    返回它的最大深度 3 。

    二叉树定义如下:

    public class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
    
        TreeNode(int x) {
            val = x;
        }
    }
    

    分析与代码

    • 求最大深度,即求二叉树有多少层。

    解法一、递归

    • DFS 深度优先搜索。
    • 就是求左右子树的最大深度加上自己的这一层 1,为 null 则为 0。
    • 一行解决。

    代码:

    class Solution {
        public int maxDepth(TreeNode root) {
            return root == null ? 0 : Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
        }
    }
    

    解法二、层次遍历

    • BFS 广度优先搜索。
    • 注意:在遍历一层中的结点时,不要这样写for (int i = 0; i < queue.size(); i++),因为插入孩子结点后队列长度会变化,遍历将会一次遍历完所有结点,而我们此时只是要遍历一层。应该写:for (int i = queue.size(); i > 0; i--),或者for (int i = 0, size = queue.size(); i < size; i++);总之就是先取得此时队列的长度,用此时的长度遍历。

    代码:

    class Solution {
        public int maxDepth(TreeNode root) {
            if (root == null) {
                return 0;
            }
            int depth = 0;
            Queue<TreeNode> queue = new LinkedList<>();
            queue.offer(root);
            while (!queue.isEmpty()) {
                depth++;
                for (int i = queue.size(); i > 0; i--) {
                    TreeNode cur = queue.poll();
                    if (cur.left != null) {
                        queue.offer(cur.left);
                    }
                    if (cur.right != null) {
                        queue.offer(cur.right);
                    }
                }
            }
            return depth;
        }
    }
    

    小结

    DFS 用栈(递归其实也是栈),BFS 用队列。

    Java 队列添加元素最好使用 offer 方法。



    ┆ 然 ┆   ┆   ┆   ┆ 可 ┆   ┆   ┆ 等 ┆ 暖 ┆
    ┆ 而 ┆ 始 ┆   ┆   ┆ 是 ┆ 将 ┆   ┆ 你 ┆ 一 ┆
    ┆ 你 ┆ 终 ┆ 大 ┆   ┆ 我 ┆ 来 ┆   ┆ 如 ┆ 暖 ┆
    ┆ 没 ┆ 没 ┆ 雁 ┆   ┆ 在 ┆ 也 ┆   ┆ 试 ┆ 这 ┆
    ┆ 有 ┆ 有 ┆ 也 ┆   ┆ 这 ┆ 会 ┆   ┆ 探 ┆ 生 ┆
    ┆ 来 ┆ 来 ┆ 没 ┆   ┆ 里 ┆ 在 ┆   ┆ 般 ┆ 之 ┆
    ┆   ┆   ┆ 有 ┆   ┆   ┆ 这 ┆   ┆ 降 ┆ 凉 ┆
    ┆   ┆   ┆ 来 ┆   ┆   ┆ 里 ┆   ┆ 临 ┆ 薄 ┆
  • 相关阅读:
    XML Schema
    Magento 2 instantiate object by Factory Objects
    Magento 2 Factory Objects
    UML类图与类的关系详解
    Magento add product attribute and assign to all group
    MyISAM 和InnoDB的区别
    Finding the Right EAV Attribute Table
    Implement Trie (Prefix Tree)
    Graph Valid Tree
    Maximum Subarray III
  • 原文地址:https://www.cnblogs.com/qiu_jiaqi/p/LeetCode-104.html
Copyright © 2020-2023  润新知