二叉树的最大深度(leetcode - 104)
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
思路 (深度优先遍历)
- 声明变量deep记录节点的最大深度
- 深度优先遍历整棵树,并记录每个节点的层级,不断刷新deep
var maxDepth = function(root) {
let deep = 0;
const dfs = (n, l) => {
if(!n) return;
if(!n.left && !n.right) {
deep = Math.max(deep, l)
}
if(n.left) dfs(n.left, l+1)
if(n.right) dfs(n.right, l+1)
}
dfs(root, 1)
return deep;
};
// leetcode官方
var maxDepth = function(root) {
if(!root) {
return 0
}else{
const leftHeight = maxDepth(root.left);
const rightHight = maxDepth(root.right);
return Math.max(leftHeight, rightHight) + 1
}
};
思路 (广度优先遍历)
- 声明一个栈
stack
和最大深度deep
- 把第一层级的节点(根节点)入栈
- 把第一层级的节点全部出栈,
deep
加1 - 把下一层级的节点入栈
- 把下一层级的节点全部出栈,
deep
加1 - 重复4、5步骤,直至stack为空,得到最大的deep
var maxDepth = function(root) {
if(!root) {
return 0;
}
const stack = [root];
let deep = 0;
while(stack.length){
let len = stack.length;
while(len > 0) {
let n = stack.shift();
if(n.left) stack.push(n.left);
if(n.right) stack.push(n.right);
len--
}
deep++;
}
return deep;
};