力扣树专题-5 深度优先搜索 leetcode104 101 112 543 129 五道题小练一下深度优先遍历搜索算法 java刷题笔记

听不少大佬建议过——力扣刷题要从树开始 !
因为可以建立起套路化的思路~ 另外就是锻炼好递归的思想
所以 我们从树开始~
本专题采用 前面提到的 “兔系刷题法
不求钻研多种解法 只求快速见题型快速刷题!

另外 力扣评论区里看见的——

树的题目写不出来,多背几个模版就行。

前中后序、广度深度遍历、路径和、深度,直径,这些全部背下来。

感觉很有道理!多背些多理解些套路嘛!

本专题整理了tag中包括深度优先搜索的题
感觉树的问题中 有一大部分都是使用深度优先搜索的思路进行解题!
掌握套路和思想对解题很有好处呐!
这里挑选了比较火爆的几道题
之后如果遇到 再收录进来吧

啥是深度优先搜索算法?

借用力扣官方给出的概念解释——

深度优先搜索是一种用于遍历或搜索树或图的算法
其过程简要来说是对每一个可能的分支路径深入到不能再深入为止 且每个节点只能访问一次

回溯算法是基于深度优先搜索的
可以说 回溯算法是深度优先搜索算法DFS的一种 之后还会去刷回溯算法嗷~

我的理解是
先深入到最深处寻找答案
如果没找到就退回去换一条路再走到最深处去找
直到找到答案为止
搞不懂的话 可以看看这篇文章 前面的例子举得挺好的
后面的代码可以忽略哈~
在这里插入图片描述

104.二叉树的最大深度 easy

上个专题这个求深度的题就是使用DFS的方法进行求解的

递归

深度优先搜索 DFS

104. 二叉树的最大深度 easy

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

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

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

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

    3
   / \
  9  20
    /  \
   15   7

返回它的最大深度 3 。

解题思路

【1】自顶向下
在这里插入图片描述
具体思路就是

一层一层地进行搜索

每搜索新的一层 深度 depth+1

到最底下更新一下 ans

【2】自底向上
在这里插入图片描述
这个方法之前写过一篇博客
简单画了一下这个寻找depth值的过程 刚好吻合~
在这里插入图片描述
发现叶子节点 ------ return 0 + 1
这个 0 + 1 就是父节点的 Ldepth (看下面的代码)
在这里插入图片描述
然后再慢慢往上倒就行了~
如果有上一层 ------ return Math.max(1, Rdepth) + 1
再往上同理

递归 自顶向下

关键是计算深度方法 public void _maxDepth(TreeNode root, int depth)

class Solution {
   
    public int ans = 0;
    public void _maxDepth(TreeNode root, int depth) {
   
        if (root == null) return;
        if (root.left == null && root.right == null){
   
            ans = Math.max(ans, depth);//到最底下更新一下 ans
        }
        _maxDepth(root.left, depth + 1);//逐层的深入 每进入新的一层 就把深度加一~
        _maxDepth(root.right, depth + 1);//左边深入完 再来深入右边~
    }
    public int maxDepth(TreeNode root){
   
        _maxDepth(root, 1);
        return ans;
    }
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值