簡單的遍歷一個樹形結構數據的幾種方法、非遞歸方法效率最好。
(function (window, undefined) { var treeNodes = [ { id: 1, name: "1", children: [ { id: 11, name: "11", children: [ { id: 111, name: "111", children:[] }, { id: 112, name: "112" } ] }, { id: 12, name: "12", children: [] } ], users: [] }, { id: 2, name: "2", children: [ { id: 22, name: "22", children: [] } ] } ]; //遞歸實現 var parseTreeJson = function(treeNodes){ if (!treeNodes || !treeNodes.length) return; for (var i = 0, len = treeNodes.length; i < len; i++) { var childs = treeNodes[i].children; console.log(treeNodes[i].id); if(childs && childs.length > 0){ parseTreeJson(childs); } } }; console.log("------------- 遞歸實現 ------------------"); parseTreeJson(treeNodes); //非遞歸廣度優先實現 var iterator1 = function (treeNodes) { if (!treeNodes || !treeNodes.length) return; var stack = []; //先將第一層節點放入棧 for (var i = 0, len = treeNodes.length; i < len; i++) { stack.push(treeNodes[i]); } var item; while (stack.length) { item = stack.shift(); console.log(item.id); //如果該節點有子節點,繼續添加進入棧底 if (item.children && item.children.length) { //len = item.children.length; // for (i = 0; i < len; i++) { // stack.push(item.children[i]); // } stack = stack.concat(item.children); } } }; console.log("------------- 非遞歸廣度優先實現 ------------------"); iterator1(treeNodes); //非遞歸深度優先實現 var iterator2 = function (treeNodes) { if (!treeNodes || !treeNodes.length) return; var stack = []; //先將第一層節點放入棧 for (var i = 0, len = treeNodes.length; i < len; i++) { stack.push(treeNodes[i]); } var item; while (stack.length) { item = stack.shift(); console.log(item.id); //如果該節點有子節點,繼續添加進入棧頂 if (item.children && item.children.length) { // len = item.children.length; // for (; len; len--) { // stack.unshift(item.children[len - 1]); // } stack = item.children.concat(stack); } } }; console.log("------------- 非遞歸深度優先實現 ------------------"); iterator2(treeNodes); })(window);
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/91521.html
前天面試遇到一個多叉樹面試的題目,在這里分享記錄一下。 題目:一個樹形的數據(如下數據),面試官給你一個id,然后拿到對應的name? 數據結構大概是這個樣子 var cityData = [ { id: 1, name: 廣東省, children: [ { id: 11, ...
摘要:樹中結點的最大層次稱為樹的深度或高度。二叉樹有深度遍歷和廣度遍歷,深度遍歷有前序中序和后序三種遍歷方法。二叉樹的前序遍歷可以用來顯示目錄結構等中序遍歷可以實現表達式樹,在編譯器底層很有用后序遍歷可以用來實現計算目錄內的文件及其信息等。 樹的簡介 棧、隊列、鏈表等數據結構,都是順序數據結構。而樹是非順序數據結構。樹型結構是一類非常重要的非線性結構。直觀地,樹型結構是以分支關系定義的層次結...
閱讀 2955·2021-11-24 09:39
閱讀 2863·2021-09-29 09:34
閱讀 3558·2021-09-24 10:23
閱讀 1744·2021-09-22 15:41
閱讀 1697·2019-08-30 15:55
閱讀 3512·2019-08-30 13:58
閱讀 2621·2019-08-30 13:11
閱讀 1667·2019-08-29 12:31