手写 BFS 与 DFS

232 阅读1分钟

DOM:

    <div class="parent">
        <div class="child1">
            <div class="child1-1"></div>
            <div class="child1-2"></div>
            <div class="child1-3"></div>
        </div>
        <div class="child2">
            <div class="child2-1"></div>
            <div class="child2-2"></div>
        </div>
        <div class="child3"></div>
    </div>

DFS:

        const dfs = (node) => {
            if (!node) return [];
            const result = [];
            const stack = [node];
            while (stack.length) {
                const item = stack.pop();
                result.push(item);
                const children = item.children;
                if (!children) break;
                for (let i = children.length - 1; i >= 0; i--) {
                    stack.push(children[i])
                }
            }
            return result
        }

输出结果

[div.parent, div.child1, div.child1-1, div.child1-2, div.child1-3, div.child2, div.child2-1, div.child2-2, div.child3]

BFS:

        const bfs = (node) => {
            if (!node) return [];
            const result = [];
            const queue = [node];
            while (queue.length) {
                const item = queue.shift()
                result.push(item)
                const { children } = item
                if (!children) break
                for (let i = 0; i < children.length; i++) {
                    queue.push(children[i])
                }
            }
            return result;
        }

输出结果

[div.parent, div.child1, div.child2, div.child3, div.child1-1, div.child1-2, div.child1-3, div.child2-1, div.child2-2]