课程名称:JavaScript版数据结构与算法
课程章节:第8章 数据结构之“树”
主讲老师:lewis
课程内容:
今天学习的内容包括:
8-5 LeetCode:104. 二叉树的最大深度——基于深度优先遍历获取二叉树的最大深度。
8-6 LeetCode:111. 二叉树的最小深度——基于广度优先遍历获取二叉树的最小深度。
课程收获:
二叉树的最大深度
1、为了更好的理解二叉树的最大深度获取方法,在这里先复习下深度优先遍历:尽可能的搜索树的分支,对子节点按哥进行深度优先遍历,直至无节点。
2、因此我们在二叉树进行深度优先遍历时,获取到最大的层数就可以了,也就是最大深度。
var maxDepth = function(root) {
let res = 0
const dfs = (n,l) =>{
if(!n) return
if(!n.left && !n.right){
res = Math.max(res,l)
}
dfs(n.left,l+1)
dfs(n.right,l+1)
}
dfs(root,1)
return res
};
二叉树的最小深度
1、为了更好的理解二叉树的最小深度获取方法,在这里先复习下广度优先遍历:基于队列的先进先出,把子节点挨个入队,然后出队。
2、因此我们在二叉树进行广度优先遍历时,当出队的节点无子节点时,返回当前的层级就可以了,也就是最小深度。
var minDepth = function(root) {
if(!root) return 0
let q = [[root,1]]
while(q.length){
const [n,l] = q.shift()
if(!n.left && !n.right){
return l
}
if(n.left) q.push([n.left,l+1])
if(n.right) q.push([n.right,l+1])
}
};
今天重新看了下昨天的先中后序的算法,通过堆栈实现,理解了,感觉很快就会忘掉,今天学习了二叉树的最大深度、最小深度,是基于前天学习的深度广度优先遍历实现,由此可见算法是持续性的,需要不断学习,也需要不断复习,不断的实践,对自己说一句,加油😀~
坚持打卡,坚持学习!明天见💪~