前言
找一棵DOM树的最大深度,涉及到DOM操作的Api和一些关于闭包的思考,以及考虑如何使用尾调用优化递归问题。
一、基础准备
1.相关的DOM接口
document.body // 获取根节点
document.body.children //获取根节点孩子节点
document.body.childElementCount //获取根节点孩子节点个数
注意这里用了children这个属性,而没有用childNodes,是因为children返回的数据类型是HTMLCollection只能包含 HTML 元素节点,不会包含一些空的文本节点。至于二者的区别大家可以参考Javaccript教程
二、开始计算深度
1.初始递归
第一种方式:
var maxDepth = function(root) {
let max_depth = 0,
depth = 0
function dfs(root) {
if(!root) {
return 0
}
depth++
if(depth > max_depth) {
max_depth = depth
}
for(let ele of root.children) {
dfs(ele)
}
depth--
}
dfs(root)
return max_depth
};
第二种方式: