剑指 Offer 55 - I. 二叉树的深度
输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。
例如:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
DFS
单层递归的逻辑:先求它的左子树的深度,再求的右子树的深度,最后取左右深度最大的数值 再+1 (加1是因为算上当前中间节点)就是目前节点为根节点的树的深度。
var maxDepth = function(root) {
const dfs = (node) => {
if(!node) return 0
let left = dfs(node.left)
let right = dfs(node.right)
return Math.max(left, right) + 1
}
return dfs(root)
};
层序遍历BFS
关键点: 每遍历一层,则计数器 +1+1 ,直到遍历完成,则可得到树的深度。
var maxDepth = function(root) {
let depth = 0, queue = [root]
if(!root) return depth
while(queue.length){
let len = queue.length
while(len--){
let node = queue.shift()
if(node.left) queue.push(node.left)
if(node.right) queue.push(node.right)
}
depth++
}
return depth
};