1. 程式人生 > >Dom的深度優先遍歷和廣度優先遍歷

Dom的深度優先遍歷和廣度優先遍歷

深度 class pos shift ret unshift ext bsp wide

//深度優先遍歷的遞歸寫法
function DFTraversal(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;
 }
//深度優先遍歷的非遞歸寫法
function DFT(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; } //廣度優先遍歷的遞歸寫法 function BSTraversal(node) { var nodes = []; var i = 0; if (node != null) { nodes.push(node); wideTraversal(node.nextElementSibling); node = nodes[i++]; wideTraversal(node.firstElementChild); } return nodes; } //廣度優先遍歷的非遞歸寫法
function BFT(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; }

Dom的深度優先遍歷和廣度優先遍歷