前言
上篇我们学习了层次遍历怎样使用,不会的读者可以滑到文章底部,小嘟在底部放着链接哦!
本次带着大家学习另一种遍历方式-深度遍历(其实这个也不算是个新词,我感觉之前的三种遍历方式也可以看做是深度遍历)
对于这两种遍历方式,小嘟要说的是,它首先提出来的是为了解决图的一些问题,而树和图又有点类似,所以小嘟认为,这两种算法不应该算是树的基本遍历方式,而应该算作图的,只是我们在这里可以使用这样的方式更好的解决问题。
正文
1.首先我们先认识认识什么是深度遍历?
首先深度遍历是为了解决图中的问题而被提出来的,深度优先搜索遍历的思路:我们这里举一个例子,比方说我们在玩迷宫游戏,我们刚开始肯定不知道走哪一个方向能找到出口,这个时候,我们就会按照一定的规则选择一个方向,一直往下走,直到找到出口,或者遇到了墙,遇到墙了也就意味着此方向走不通,我们需要换一个方向继续探索,这里就体现了深度优先搜索遍历的思想,即我们会沿着一个路径一直走,直到此路不通或者达到了我们的预期。
这里还体现了一个算法中经常遇到的算法——回溯
,小嘟我举一个例子,在生活中,开车的时候不小心开过头了,这个时候你不得把车往回倒,然后重新走一条路到达我们的目的地。这个我们就可以看做回溯的一个简单解释。
- 百度百科的解释
小嘟
简要说一句:客官,此路不通,请退回另走一条路呗!这就是回溯算法😂😂😂。 - 2.理论结束,现在来看看今日的题目呗!
- 3.代码部分
var maxDepth = function(root) { let max; const maxLength = (root01)=>{ if(root01 == null) return 0; let left = maxLength(root01.left)+1; let right = maxLength(root01.right)+1; return (left>right?left:right); } max = maxLength(root); return max; }
题目介绍:题目要求二叉树的深度,也就是从根节点到某个叶子结点的路径上结点数最多。如果只有一个结点,那么根节点和叶子结点可以认为是同一个,那么二叉树的深度就是1。看上边的示例,我们计算出最大深度为3。深度为3的路径是哪一部分呢?
路径1: | 3->20->15 |
路径2: | 3->20->7 |
具体选择哪一个路径,是由我们编写代码来决定的。
代码解释:要计算一个二叉树的深度,我们肯定要先遍历,然后呢,我们要对比,那我们要对比的对象是什么呢?分析题目我们可以很容易的知道,我们要对比的是某结点的左子树和右子树的深度,然后每次函数结束的时候,我们就将较大的深度返回,这样一层一层的返回我们最后就计算出了整个二叉树的最大深度。思路比较简单,小嘟就不比多说了,说多了就有点啰嗦了,嘿嘿嘿!
结尾
今天小嘟写的有点简单了,好多东西都没有深入讲解,在这里给读者说声抱歉!
小嘟的想法是先将文章写出来,不管怎样,自己还是坚持在做题,也希望读者能够坚持下去👍👍👍。
内容简单点,但是小嘟觉得自己将重要的内容讲出来了,对小白或者基础不好的初学者来说,这个就足够了,写的多了还可能会适得其反。
我这几天再看看这方面的知识,等小嘟掌握的差不多了,再回来修改文章的一些细节。
小嘟不会为了文章的数量而忽视质量,请读者放心,若你们发现小嘟开始水文,请及时制止。
话不多说,干就完了,读者也要坚持哦!👍👍👍
我是小嘟,一个爱学习的渣渣溜啦溜啦...