给定树结构的最大深度

时间:2016-01-22 04:06:03

标签: javascript html arrays json logic

我的json结构就像一个树形结构。

1 个答案:

答案 0 :(得分:0)

理解counter的数据结构需要一段时间我希望能够复制如何获得解决方案,但它只是松散地基于发布的代码(对于初学者没有temp变量)。 / p>

理解以下代码的关键是paramListsvalue对象具有相似但不相同的结构。

function findCounterDepth( counter)
{   var maxDepth = 0;
    counter.algoList.forEach( function( algo)
    {   findParamListDepth(algo.paramList, 0);
    });

    function findParamListDepth(paramList, depth)
    {   ++depth;
        paramList.forEach( function (paramObj)
        {   var child = paramObj.svalue || paramObj.paramList;
            if( child)
            {   findParamListDepth(child, depth);
                return;
            }
       });
       maxDepth = Math.max(maxDepth, depth);
    }
    return maxDepth;
}

findCounterDepth(counter);
//= 4

<小时/> 的修改

为每个算法对象添加叶节点数是不复杂的。这里计数被添加为算法对象的dataLeafCount属性:

function findCounterDepth( counter)
{   var maxDepth = 0;
    var leafCount = 0; // add a leaf counter

    counter.algoList.forEach( function( algo)
    {  leafCount = 0;  // zero leaf count per algorithm object
       findParamListDepth(algo.paramList, 0);
       algo.dataLeafCount = leafCount;  // store as "dataLeafCount" property
    });

    function findParamListDepth(paramList, depth)
    {   ++depth;
        paramList.forEach( function (paramObj)
        {   var child = paramObj.svalue || paramObj.paramList;
            if( child)
            {   findParamListDepth(child, depth);
                return;
            }
            ++leafCount;   // it doesn't have children, increment leaf count; 
       });
       maxDepth = Math.max(maxDepth, depth);
    }
    return maxDepth;
}

findCounterDepth(counter);  //= 4
counter.algoList[0].dataLeafCount; //= 4
counter.algoList[1].dataLeafCount; //= 4

请注意,如果需要维护输入对象不变性,则应修改findCounterDepth以返回新数据对象中的值。