【leetcode刷题】25.二叉树的最大深度——Java版

简介: ⭐欢迎订阅《leetcode》专栏,每日一题,每天进步⭐今天又是开心的一天——leetcode此题热评

c09f2244ea699f0dbf7329b21e1b00ee.png

前言

哈喽,大家好,我是一条。


糊涂算法,难得糊涂


Question

104. 二叉树的最大深度

难度:简单


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


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


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


示例:

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

4b1afb55a9959a212e0c0eacfbc6357e.png

返回它的最大深度 3 。


Solution

为大家简答介绍两个搜索算法:DFS和BFS


DFS:深度优先搜索算法,步骤为:

1.递归下去

2.回溯上来

顾名思义,深度优先,则是以深度为准则,先一条路走到底,直到达到目标。这里称之为递归下去。

否则既没有达到目标又无路可走了,那么则退回到上一步的状态,走其他路。这便是回溯上来。


BFD:广度优先算法


广度优先搜索较之深度优先搜索之不同在于,深度优先搜索旨在不管有多少条岔路,先一条路走到底,不成功就返回上一个路口然后就选择下一条岔路,而广度优先搜索旨在面临一个路口时,把所有的岔路口都记下来,然后选择其中一个进入,然后将它的分路情况记录下来,然后再返回来进入另外一个岔路,并重复这样的操作。


本题就是基于深度优先搜索的递归:


根节点为空直接返回

节点为空时说明高度为 0,所以返回 0;节点不为空时则分别求左右子树的高度的最大值,同时加1表示当前节点的高度,返回该数值。

Code

所有leetcode代码已同步至github


欢迎star

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

Result

复杂度分析

  • 时间复杂度:O(N)

bbf655840b87739208e7cfba34340054.png

🌈寻宝

⭐今天是坚持刷题更文的第25/100天


⭐各位的点赞、关注、收藏、评论、订阅就是一条创作的最大动力


⭐更多算法题欢迎关注专栏《leetcode》


为了回馈各位粉丝,礼尚往来,给大家准备了一条多年积累下来的优质资源,包括 学习视频、面试资料、珍藏电子书等


怎么领取请大家自己找,寻宝游戏现在开始。


找不到可以评论留言,一条就会注意到你。


如果还不行,请私信我。


/

7b6b0b32d09cb6c250cdb614723073a0.png

相关文章
|
29天前
【LeetCode 31】104.二叉树的最大深度
【LeetCode 31】104.二叉树的最大深度
18 2
|
29天前
【LeetCode 29】226.反转二叉树
【LeetCode 29】226.反转二叉树
15 2
|
29天前
【LeetCode 28】102.二叉树的层序遍历
【LeetCode 28】102.二叉树的层序遍历
13 2
|
12天前
|
算法 Java
JAVA 二叉树面试题
JAVA 二叉树面试题
13 0
|
29天前
【LeetCode 43】236.二叉树的最近公共祖先
【LeetCode 43】236.二叉树的最近公共祖先
16 0
|
29天前
【LeetCode 38】617.合并二叉树
【LeetCode 38】617.合并二叉树
13 0
|
29天前
【LeetCode 37】106.从中序与后序遍历构造二叉树
【LeetCode 37】106.从中序与后序遍历构造二叉树
12 0
|
29天前
【LeetCode 34】257.二叉树的所有路径
【LeetCode 34】257.二叉树的所有路径
11 0
|
29天前
【LeetCode 32】111.二叉树的最小深度
【LeetCode 32】111.二叉树的最小深度
15 0
|
9天前
|
安全 Java
java 中 i++ 到底是否线程安全?
本文通过实例探讨了 `i++` 在多线程环境下的线程安全性问题。首先,使用 100 个线程分别执行 10000 次 `i++` 操作,发现最终结果小于预期的 1000000,证明 `i++` 是线程不安全的。接着,介绍了两种解决方法:使用 `synchronized` 关键字加锁和使用 `AtomicInteger` 类。其中,`AtomicInteger` 通过 `CAS` 操作实现了高效的线程安全。最后,通过分析字节码和源码,解释了 `i++` 为何线程不安全以及 `AtomicInteger` 如何保证线程安全。
java 中 i++ 到底是否线程安全?