我在寻找一个合适的算法,它可以返回集合层次结构中对象集合的最大深度。我有一个根对象,它可能包含也可能不包含同一类型、数量可变的对象集合。这些子对象中的每一个,它们本身可能包含同一类型和数量可变的集合,等等,直到任何深度。(见图)
我在寻找一个最好的算法,它能返回一个整数来表示层次结构中最深的集合的级别(在我的图中,这个整数是4)。
我已经递归地尝试了下面的函数,但是它总是以1为单位。
var getLevelFunc = function (children) {
var depth = 0
for (var c = 0; c < children.length; c++) {
let child= children[c];
if (child.children() != null && child.children().length > 0) {
var tempDepth = getLevelFunc(child.children());
if (tempDepth > depth) {
depth = tempDepth
}
}
}
return 1 + depth;
}
多谢
1条答案
按热度按时间imzjd6km1#
我不是100%确定你已经得到的数据结构,所以我模仿了一个更简单的没有任何
children()
方法,希望它仍然是有意义的。我认为解决方案有点棘手的部分原因是从子节点而不是节点开始,毕竟如果你有一个节点没有子节点,它的深度应该仍然是1(如果我理解正确的话)。通过在每个阶段将深度传递给
getLevelFunc
,我认为这可能会更容易看到代码中应该发生的事情。