浅谈JavaScript中树的深度优先遍历和广度优先遍历

2018-09-25  本文已影响0人  小豆soybean

原文链接:https://blog.csdn.net/zhouziyu2011/article/details/62236006
1、深度优先遍历的递归写法

function deepTraversal(node) {
    var nodes = [];
    if (node != null) {  
            nodes.push(node);  
            var children = node.children;  
            for (var i = 0; i < children.length; i++)  
                deepTraversal(children[i]);  
        }  
    return nodes;
}

2、深度优先遍历的非递归写法

function deepTraversal(node) {
    var nodes = [];
    if (node != null) {
        var stack = [];
        stack.push(node);
        while (stack.length != 0) {
            var item = stack.pop();
            nodes.push(item);
            var children = item.children;
            for (var i = children.length - 1; i >= 0; i--)
                stack.push(children[i]);
        }
    }  
    return nodes;
}

3.广度优先遍历的非递归写法

function wideTraversal(selectNode) {
    var nodes = [];
    if (selectNode != null) {
        var queue = [];
        queue.unshift(selectNode);
        while (queue.length != 0) {
            var item = queue.shift();
            nodes.push(item);
            var children = item.children;
            for (var i = 0; i < children.length; i++)
                queue.push(children[i]);
        }
    }
    return nodes;
}

上一篇 下一篇

猜你喜欢

热点阅读