leetcode--二叉树的最大深度

题目:给定一个二叉树,编写程序计算二叉树最大的深度。

二叉树的深度定义:根结点到最远的叶节点的最长路径上的结点数

叶节点:没有左右孩子的结点

根据题目完成下面的函数:

int maxDepth(struct TreeNode* root){

}

到这里大家可以先不要往下看,先思考一下。

在这里可以给大家一点提示,可以采用DFS,BFS来完成。

方案1:深度优先搜索(DFS)

虽然我之前的博客已经讲解过深度优先算法,在这里考虑到有些朋友忘记了这种算法,我就简单讲解一下。

深度优先搜索就是一条路走到底,这条不再通路,就返回上一个路口,看一下有没有岔路,有的话,从这条岔路又一直走到底,发现没路了,再返回上一个路口是否又岔路,一直这样下去,直到所有的岔路口都走遍。为更直观,我还是画一下图给大家。

从路口1开始进入,假设规律是碰到岔路口,先走左边再走右边

leetcode--二叉树的最大深度_第1张图片

第一次走法:1->2>4>8最后发现路口8之后不再有路,返回上一个路口4

第二次走法:从路口4出发,往右走,发现又是死胡同,走回上一个路口2

第三次走法:从路口2出发,往右走,2->5,发路口5之后还是死胡同,走回上一个路口2,发现路口2的左右岔路口都走过了,再往回到路口1

第四次走法:从路口1出发,1->3>6,发现路口6之后是死胡同,往回走到路口3

第五次走法:从路口3出发,3->7,发现路口7之后又是死胡同,往回走到路口3,发现路口3左右岔路口都已经走过了,再往回走到1,发现路口1的左右岔路口都走遍了,而且路口1还是入口,也就说此时所有的路都走遍了,可以直接出去了。

所以总的路线为1->2->4->8->5->3->6->7

这下大家对深度优先搜索有更深的印象了吧。

好了,回到题目的答案上来:

leetcode--二叉树的最大深度_第2张图片

leetcode--二叉树的最大深度_第3张图片

方案2: 广度优先搜索

我还是来给看我博客的朋友们解释一下广度优先搜索(BFS)。

我还是以上面的栗子进行讲解。

规则是遇到岔路口,先将岔路口走完,再走岔路口的岔路口,还是先走岔路口的左边,再到右边

 leetcode--二叉树的最大深度_第4张图片

 第一步:1->2->3,走完第一个岔路口,接着走到该岔路抠左边的下一个岔路口2

第二步:2->4->5,走完该岔路口,接着走1岔路口的右边下一个岔路口3

第三步:3->6->7,走完该岔路口,接着走岔路口4

第四步:4->8,此时就已经走完了

总路线:1->2->3->4->5->6->7->8

简单来说就是一层一层的遍历

好了,回到答案本身:

leetcode--二叉树的最大深度_第5张图片

 

你可能感兴趣的:(C语言,数据结构与算法)