function N_pre_traverse(root){
var res = [];
var a = function recurive(root){
if(root == null)
return null;
res.push(root.val);
for(var i = 0 ; i < root.children.length ; i++)
{
recurive(root.children[i]);
}
}(root)
return res;
}
②迭代入栈方式
function pre_traverse(root){
var res = [root];
var output = [];
while(res.length)
{
var header = res.pop();
output.push(header.val)
if(header.right!=null)
res.push(header.right);
if(header.left!=null)
res.push(header.left);
}
console.log(output);
return 0;
}
function mid_traverse(root)
{
var pre = root;
var cur = root;
var output = [];
while(cur)
{
if(cur.left == null)
{
output.push(cur.val);
cur = cur.right;
}
else
{
pre = cur.left;
while(pre.right)
{
pre = pre.right;
}
pre.right = cur;
var temp = cur;
cur = cur.left;
temp.left = null;
}
}
return output;
}
function N_postorder_traverse(root){
var res = [];
var a = function recurive(root){
if(root == null)
return null;
for(var i = 0 ; i < root.children.length ; i++)
{
recurive(root.children[i]);
}
res.push(root.val);
}(root)
return res;
}
(4)层序遍历
① 二叉树BFS利用队列进行广搜迭代
function Bitree_BFS(root) {
var queue = [root];
var output = [];
while (queue.length) {
var res = [];
var len = queue.length;
for (var i = 0; i < len; i++)
{
var node = queue.shift();
res.push(node.val);
if (node.left != null)
queue.push(node.left);
if (node.right != null)
queue.push(node.right);
}
output.push(res)
}
return output;
}
② N叉树利用BFS层序遍历
var levelOrder = function (root){
if(root == null)
{
return [];
}
var queue = [root];
var output = [];
while (queue.length) {
var res = [];
var len = queue.length;//获取每一层的长度
for(var i = 0 ; i < len; i++)
{
var node = queue.shift();//截取头节点
res.push(node.val);//将每一层的值存入数组
queue.push(...node.children);//每次将一层所有的节点压入
}
output.push(res);
}
return output;
}