2016-01-22 66 views
-1

我的json結構就像一個樹結構。給定樹結構的最大深度

+0

這必須是我讀過的最通用的標題之一。 **每個**編程問題都是關於特定場景的編碼邏輯。請儘量爲讀者提供更多幫助。 – Barmar

+0

***但它沒有給出正確的結果***並沒有告訴我們你的問題是什麼或你想要什麼幫助。究竟是什麼問題?你觀察到什麼?結果應該是什麼?要在這裏獲得幫助,您需要非常具體地瞭解問題的具體內容。請記住,我們無法讀懂你的想法。我們不知道你在找什麼結果。我們只能閱讀你的文字和代碼。 – jfriend00

回答

0

我花了一段時間才瞭解counter的數據結構我希望複製如何達成解決方案,但它只是鬆散地基於發佈的代碼(不適用於初學者的變量temp)。

理解以下代碼的一個關鍵是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應該進行修改,以在新的數據對象返回值。

+0

如何在給定的算法對象中找到葉節點的no? – Jason

+0

你問這個問題嗎?你有什麼嘗試? – traktor53