题目名称:二叉树的最大深度
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
解法
- 这道题是二叉树的最经典问题,因为分别能用DFS和BFS两种方法解决
一、深度优先遍历
- 递归,二叉树的最大深度为左子树的最大深度+1,或者右子树的最大深度+1
/**
* @param {TreeNode} root
* @return {number}
*/
var maxDepth = function (root) {
if (!root) return 0
return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1
};
二、广度优先遍历
- 每层循环中深度+1,直到无可循环
/**
* @param {TreeNode} root
* @return {number}
*/
var maxDepth1 = function (root) {
if (!root) return 0
let dep = 0
let queue = []
queue.push(root)
while (queue.length) {
dep++
let list = []
for (let node of queue) {
node.left && list.push(node.left)
node.right && list.push(node.right)
}
queue = list
}
return dep
};
总结
- 二叉树的问题最适合套模板
- 深度优先模板
function dfs(root){
if(!root) do some thing...
if(root.left) do something...
if(root.right) do something...
}
- 广度优先模板
function bfs(root){
if(!root) return null
let queue = [root]
while(queue.length){
const stack = []
for(let node of queue){
node.left && do something...
node.right && do something...
}
queue = stack
}
return something
}
说明
- 本题解已同步leetcode-js-simple/01.[ 104 ] 二叉树的最大深度,可以复制代码进行调试。
- 总结出了一套亲测有效的前端无痛刷题项目,有助于算法小白平稳入门,详见leetcode-js-roadmap,希望对从零开始刷题的前端小伙伴们带来帮助~
本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情