思路:
1.首先,自己心里要明确的一件事是输入的数据类型是一个数组,数组里的每一个元素存储的是树结点的指针。
2. 初始化一个map容器。遍历数组的每一个树结点,然后以每个树结点的id为map的key值,value为树结点的指针。
3. 再遍历一次数组的每个树结点,用树结点的pid作为key值,去map容器找对应的父结点。如果有父结点,就将此树结点的指针放进属性为children的数组里,如果没有children属性,就声明一个children属性,并初始化为数组,最后将树结点的指针放进数组里。
let array = [
{
id: 1,
pid: 0,
name: 'xh'
},
{
id: 2,
pid: 1,
name: 'zq'
},
{
id: 3,
pid: 2,
name:'hy'
}
]
function arrayToTree(array) {
let map = new Map ();
let treeSet = [];
array.forEach(item => {
map.set(item.id, item);
});
array.forEach(item => {
let parent = map.get(item.pid);
if(parent) {
if(parent.children) {
parent.children.push(item);
}
else {
parent.children = []
parent.children.push(item);
}
}
else {
treeSet.push(item);
}
})
return treeSet
}
function travelTree(treeNode) {
if(treeNode == null) return;
console.log(treeNode.name);
if(treeNode.children) {
treeNode.children.forEach(item => {
travelTree(item);
})
}
else return;
}
function travelTreeSet(treeSet) {
treeSet.forEach(item => {
travelTree(item);
})
}
travelTreeSet(arrayToTree(array))