基于上次的二叉树,现在变成多叉树的遍历了。多叉树的遍历不再分为前中后序遍历,而是深度优先遍历和广度优先遍历。其中深度优先遍历又分为递归和非递归。
遍历算法
深度优先遍历
递归版本
function recursionOrder(node) {
nodeArr.push(node);
if(node==null || node.children.length == 0) return;
for(var i = 0; i < node.children.length; i++) {
recursionOrder(node.children[i]);
}
}
非递归版本
function deepOrder(rootnode) {
nodeArr.push(rootnode);
var queue = [];
for(var i = 0; i < rootnode.children.length; i++) {
queue.push(rootnode.children[i]);
}
while(queue.length) {
var child = queue.shift();
nodeArr.push(child);
//由于unshift()是向前添加元素,所以使用它必须从后往前添加子节点
var tempLength = child.children.length-1;
while(child.children[tempLength]!=undefined) {
queue.unshift(child.children[tempLength]);
tempLength--;
}
}
}
广度优先遍历
function wideOrder(rootnode) {
nodeArr.push(rootnode);
var queue = [];
for