摘要:分別用廣度優(yōu)先遍歷和深度優(yōu)先遍歷展開下面節(jié)點(diǎn)示例廣度優(yōu)先遍歷輸出結(jié)果深度優(yōu)先遍歷輸出結(jié)果關(guān)系型數(shù)組轉(zhuǎn)換成樹形結(jié)構(gòu)對象類似期望輸出代碼
1.分別用廣度優(yōu)先遍歷和深度優(yōu)先遍歷展開下面節(jié)點(diǎn)
示例
var tree = { name: "root", children: [{ name: "child1", children: [{ name: "child1_1", children: [] }, { name: "child1_2", children: [] }] }, { name: "child2", children: [{ name: "child2_1", children: [] }] }, { name: "child3", children: [{ name: "child2_1", children: [] }] }] };
廣度優(yōu)先遍歷:
function wideTraversal(node) { var nodes = []; if (node != null) { var queue = []; queue.unshift(node); while (queue.length != 0) { var item = queue.shift(); nodes.push(item.name); var children = item.children; for (var i = 0; i < children.length; i++) { queue.push(children[i]); } } } return nodes; } console.log(wideTraversal(tree))
輸出結(jié)果:
[ "root","child1","child2","child3","child1_1","child1_2","child2_1","child2_1" ]
深度優(yōu)先遍歷:
function traverseTree(node) { var child = node.children, arr = []; arr.push(node.name); if (child) { child.forEach(function(node) { arr = arr.concat(traverseTree(node)); }); } return arr; } console.log(traverseTree(tree))
輸出結(jié)果:
[ "root","child1","child1_1","child1_2","child2","child2_1","child3","child2_1" ]2.關(guān)系型數(shù)組轉(zhuǎn)換成樹形結(jié)構(gòu)對象
類似:
var data = [ { parentId: 0, id: 1, value: "1" }, { parentId: 3, id: 2, value: "2" }, { parentId: 0, id: 3, value: "3" }, { parentId: 1, id: 4, value: "4" }, { parentId: 1, id: 5, value: "5" } ]
期望輸出:
[ {id:1,value:"1", children:[{id:4,value:"4",children:[]}, {id:5,value:"5",children:[]}]}, {id:3,value:"3", children:[id:2,value:"2",children:[]]}]
代碼:
var getJsonTree = function(data, parentId) { var itemArr = []; for (var i = 0; i < data.length; i++) { var node = data[i]; //data.splice(i, 1) if (node.parentId == parentId) { var newNode = { id: node.id, value: node.value, children: getJsonTree(data, node.id) }; itemArr.push(newNode); } } return itemArr; } console.log(getJsonTree(data, 0))
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/109185.html
摘要:示例輸入輸出示例輸入輸出第一種方法滑動窗口解法滑動窗口兩個邊界情況第二種方法位運(yùn)算解法位運(yùn)算頭條財(cái)經(jīng)部門一面二維數(shù)組的回形遍歷這是頭條財(cái)經(jīng)部門一面的一道題記住遍歷過的索引更多前端算法題,參見算法倉庫。 1. 百度百家號一面 面完回來搜素,才發(fā)現(xiàn)這道題其實(shí)是LeetCode540。 540 medium 有序數(shù)組中的單一元素 給定一個只包含整數(shù)的有序數(shù)組,每個元素都會出現(xiàn)兩次,唯有一個數(shù)...
摘要:求出滿足這樣要求的路徑的數(shù)目,并返回。第二道題給定一個數(shù),將其拆分為個平方數(shù)的和,求最小的。這道題不能用貪心算法求解。當(dāng)時(shí),如果用貪心算法,結(jié)果就是,返回。假設(shè)給出的數(shù)字為。第三輪減,得到,將放入隊(duì)列中。 第一道題:給定一棵二叉樹,在二叉樹的所有路徑中找到路徑上結(jié)點(diǎn)之和為題目給定值的子路徑。路徑不一定以根節(jié)點(diǎn)為開頭,也不一定以葉節(jié)點(diǎn)為結(jié)尾。并且根據(jù)分析路徑之間應(yīng)該可以重疊。求出滿足這樣...
摘要:另外,原題還有字?jǐn)?shù)限制的,只有在字?jǐn)?shù)小于并且結(jié)果正確時(shí)才可以滿分。插入節(jié)點(diǎn)操作的可以使用和方法,隨便用一個都行。但是,這題有兩個限制條件優(yōu)雅的方式前個元素。 1.有一個長度未知的數(shù)組a,如果它的長度為0就把數(shù)字1添加到數(shù)組里面,否則按照先進(jìn)先出的隊(duì)列規(guī)則讓第一個元素出隊(duì)。 分析:這道題主要是考核了數(shù)組的隊(duì)列方法和棧方法。另外,原題還有字?jǐn)?shù)限制的,只有在字?jǐn)?shù)小于30并且結(jié)果正確時(shí)才可以滿...
摘要:另外,原題還有字?jǐn)?shù)限制的,只有在字?jǐn)?shù)小于并且結(jié)果正確時(shí)才可以滿分。插入節(jié)點(diǎn)操作的可以使用和方法,隨便用一個都行。但是,這題有兩個限制條件優(yōu)雅的方式前個元素。 1.有一個長度未知的數(shù)組a,如果它的長度為0就把數(shù)字1添加到數(shù)組里面,否則按照先進(jìn)先出的隊(duì)列規(guī)則讓第一個元素出隊(duì)。 分析:這道題主要是考核了數(shù)組的隊(duì)列方法和棧方法。另外,原題還有字?jǐn)?shù)限制的,只有在字?jǐn)?shù)小于30并且結(jié)果正確時(shí)才可以滿...
閱讀 1317·2021-10-27 14:14
閱讀 3573·2021-09-29 09:34
閱讀 2476·2019-08-30 15:44
閱讀 1715·2019-08-29 17:13
閱讀 2569·2019-08-29 13:07
閱讀 866·2019-08-26 18:26
閱讀 3341·2019-08-26 13:44
閱讀 3210·2019-08-26 13:37