假设我有这样的树形结构:
-root
|
|
|-child1
|
|-innerChild1
|
|-innerChild2
|
|-child2
我想编写一个JS函数,它可以接收一棵树的元素,并从该元素的角度来查看它有多深。例如:
var depth = getInnerDepth(root);
depth = 3;
这里的“深度”是指根节点作为父节点位于第1层,它的一级子节点位于第2层,其中一个子节点(child1)拥有深度为3的子节点。
var depth = getInnerDepth(child1);
depth = 2;
深度为2,因为在这种情况下child1被认为是父级,所以它的深度为1。Child1有子节点,所以结果为2。
var depth = getInnerDepth(innerChild1);
depth = 1;
深度为1,因为从innerChild1的角度来看,它没有任何子元素,所以它的深度为1。
我想这应该是递归实现的,但我在思考一个好的方法时遇到了困难。
function getInnerDepth(parent){
var depth = 1;
if (parent.hasChildren) {
depth++;
parent.children.forEach(function(child){ getInnerDepth(child); })
}
return depth;
}
类似于这样的内容。(我知道这不起作用 :-) )。
(注:该段文字已被翻译为中文,保留了原有的HTML标签。)
.reduce()
的例子...function getDepth(root, depth) { return root.children.reduce((d, ch) => Math.max(d, getDepth(ch, depth+1||1)), depth||0) }
- user1106925