V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Acceml
V2EX  ›  程序员

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

  •  
  •   Acceml ·
    Acceml · 2019-03-01 08:39:47 +08:00 · 1901 次点击
    这是一个创建于 2086 天前的主题,其中的信息可能已经有所发展或是发生改变。

    题目

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

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

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

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

        3
       / \
      9  20
        /  \
       15   7
    

    返回它的最大深度 3。

    题解

    求最大深度,和深度相关,我们很容易想到用层序遍历。每遍历一层,就深度加 1, 怎么记录是第几层我们之前的文章中讲过了。

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public int maxDepth(TreeNode root) {
            if (root == null) {
                return 0;
            }
            int depth = 0;
            LinkedList<TreeNode> queue = new LinkedList<>();
            queue.add(root);
            while (!queue.isEmpty()) {
                int size = queue.size();
                while (size > 0) {
                    TreeNode current = queue.poll();
                    if (current.left != null) {
                        queue.add(current.left);
                    }
                    if (current.right != null) {
                        queue.add(current.right);
                    }
                    size--;
                }
                depth++;
            }
            return depth;
        }
    }
    

    这道题用递归解代码比较简单. 递归的结束条件: 当节点为叶子节点的时候. 递归的子问题: 当前最大深度 = 左右子树最大深度的较大者 + 1

    代码实现就很简单了。

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

    热门阅读

    Leetcode 名企之路

    4 条回复    2019-03-04 19:59:36 +08:00
    jorneyr
        1
    jorneyr  
       2019-03-01 09:28:54 +08:00
    Leetcode 题解下的文章索引不全,能否补全一下,这样好找一些。
    qwertyegg
        2
    qwertyegg  
       2019-03-01 11:04:32 +08:00
    这种 leetcode easy 里面的简单题目,写这么一大篇感觉有点浪费资源。
    wuhaochen999
        3
    wuhaochen999  
       2019-03-01 19:17:48 +08:00
    直接 preorder traversal 不行吗
    Acceml
        4
    Acceml  
    OP
       2019-03-04 19:59:36 +08:00
    @jorneyr 这两天补一下。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5755 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 03:16 · PVG 11:16 · LAX 19:16 · JFK 22:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.