返回嵌套集合中对象的最大深度(JavaScript)

xqnpmsa8  于 2023-03-11  发布在  Java
关注(0)|答案(1)|浏览(155)

我在寻找一个合适的算法,它可以返回集合层次结构中对象集合的最大深度。我有一个根对象,它可能包含也可能不包含同一类型、数量可变的对象集合。这些子对象中的每一个,它们本身可能包含同一类型和数量可变的集合,等等,直到任何深度。(见图)

我在寻找一个最好的算法,它能返回一个整数来表示层次结构中最深的集合的级别(在我的图中,这个整数是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;
        }

多谢

imzjd6km

imzjd6km1#

我不是100%确定你已经得到的数据结构,所以我模仿了一个更简单的没有任何children()方法,希望它仍然是有意义的。
我认为解决方案有点棘手的部分原因是从子节点而不是节点开始,毕竟如果你有一个节点没有子节点,它的深度应该仍然是1(如果我理解正确的话)。通过在每个阶段将深度传递给getLevelFunc,我认为这可能会更容易看到代码中应该发生的事情。

const tree = {
  name: 'root',
  children: [
    {
      name: 'Child 1',
      children: [
        { name: 'Child 1.1' },
        {
          name: 'Child 1.2',
          children: [
            { name: 'Child 1.2.1' },
            { name: 'Child 1.2.2' },
            { name: 'Child 1.2.3' },
          ]
        }
      ],
    },
    {
      name: 'Child 2',
      children: [
        { name: 'Child 2.1' },
        { name: 'Child 2.2' },
      ],
    },
    { name: 'Child 3' },
  ]
};

const getLevelFunc = function (node, start_depth = 1) {
  let depth = start_depth;
  
  for (const child of (node.children ?? []))
    depth = Math.max(depth, getLevelFunc(child, start_depth + 1));
  
  return depth;
};

console.log(getLevelFunc(tree));

相关问题