JS中的广度与深度优先遍历

125 阅读1分钟

创建JS树

function createTee(len) {    const tree = [];    while (len--) {        tree.unshift({            key: len, children: [                {                    key: len + 10, children: [                        {key: len + 100}                    ]                }            ]        });    }    return tree;}

深度优先遍历DFS与广度优先遍历BFS

function deepTraversal(tree) {    /**     * 深度优先遍历 递归版本     for (let item of tree) {        console.log(item.key);        if (item.children && item.children.length) deepTraversal(item.children);    }     **/    /**     * 深度优先遍历 非递归版本     let nodes = [...tree];     while (nodes.length) {        const node = nodes.shift();        const list = [node];        node.children && nodes.unshift(...node.children);        for (let item of list) {            console.log(item.key);        }    }     **/    /**     * 广度优先遍历 非递归版本     let nodes = [...tree];     while (nodes.length) {        const list = nodes.splice(0, 1);        for (let item of list) {            item.children && item.children.length && nodes.push(...item.children);            console.log(item.key);        }    }     **/    /**     * 广度优先遍历 递归版本    let nodes = [];    for (let item of tree) {        console.log(item.key);        if (item.children && item.children.length) nodes.push(...item.children);    }    nodes.length && deepTraversal(nodes);     **/}deepTraversal(createTee(10));