昨天碰到的笔试编程题,多层嵌套JSON数据要把他们取出来并按A,B,C,D,E,F 顺序打印出来,后面我找到这个例题,用广度优先遍历可以实现要求
JSON数据
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: []
}]
}]
};
广度优先遍历:
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))
输出结果:
[ 'root','child1','child2','child3','child1_1','child1_2','child2_1','child2_1' ]
深度优先遍历:
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))
输出结果:
[ 'root','child1','child1_1','child1_2','child2','child2_1','child3','child2_1' ]