一. 树操作
1. 深度优先遍历
export function traverseDeep(tree, callback) {
function traverseA(list) {
for(let i=0;i<list.length;i++) {
const node = list[i];
const { children } = node;
callback(node);
if (children) {
traverseA(children);
}
}
}
traverseA(tree);
}
2. 广度优先遍历
export function traverseBreadth(tree, callback) {
const list = [].concat(tree);
while(list.length) {
const node = list.shift();
callback(node);
if (node.children) {
list.push(...node.children);
}
}
}
demo
const city = [
{
label: '河北',
value: '1',
children: [
{
label: '唐山',
value: '1-1',
children: {
label: '滦南县',
value: '1-1-1'
}
}
]
},
{
label: '湖南',
value: '2',
children: [
{
label: '长沙',
value: '2-2',
},
{
label: '张家界',
value: '2-3'
}
]
}
];
traverseDeep(city, (node) => {
console.log(node.label);
})
console.log();
traverseBreadth(city,(node) => {
console.log(node.label);
})
二. 链表操作