当前位置: 首页 > news >正文

【Leetcode】104. 二叉树的最大深度

题目

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

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

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

示例:
给定二叉树 [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】103. 二叉树的锯齿形层次遍历
  • 【Leetcode】102. 二叉树的层次遍历
  • 【Leetcode】101. 对称二叉树
  • 【Leetcode】100. 相同的树
  • 【Leetcode】98. 验证二叉搜索树

Leetcode名企之路

相关文章:

  • SDI,ASI,HDMI,DP等接口的区别
  • Luogu P3181 [HAOI2016]找相同字符 广义$SAM$
  • 主流视音频平台参数
  • python中的with语句
  • LAV Filter 源代码分析 4: LAV Video (2)
  • CSS:z-index
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 客户端网络库实现真的很简单吗?
  • HTPC家庭娱乐和XBOX未来发展畅想另:创业工作机会
  • Socket IO与NIO(四)
  • 【算法导论】学习笔记——第6章 堆排序
  • 转:网络协议概览
  • 5分钟了解 Python 中的super函数是如何实现继承的
  • LINQ To SQL在N层应用程序中的CUD操作、批量删除、批量更新
  • 问题:什么情况UDP的非阻塞写会失败?
  • 2017-08-04 前端日报
  • Apache Zeppelin在Apache Trafodion上的可视化
  • github从入门到放弃(1)
  • JavaScript-Array类型
  • Java编程基础24——递归练习
  • Js基础知识(四) - js运行原理与机制
  • Laravel5.4 Queues队列学习
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • Python 基础起步 (十) 什么叫函数?
  • ReactNative开发常用的三方模块
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • Web Storage相关
  • Windows Containers 大冒险: 容器网络
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 搭建gitbook 和 访问权限认证
  • 电商搜索引擎的架构设计和性能优化
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 工作手记之html2canvas使用概述
  • 简析gRPC client 连接管理
  • 码农张的Bug人生 - 初来乍到
  • 那些被忽略的 JavaScript 数组方法细节
  • 你真的知道 == 和 equals 的区别吗?
  • 新手搭建网站的主要流程
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • #### go map 底层结构 ####
  • #ifdef 的技巧用法
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (js)循环条件满足时终止循环
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (论文阅读30/100)Convolutional Pose Machines
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (南京观海微电子)——COF介绍
  • (实战篇)如何缓存数据
  • (译) 函数式 JS #1:简介
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • ***测试-HTTP方法