问题形貌
请完成一个函数根据之字形打印二叉树,即第一行根据从左到右的递次打印,第二层根据从右至左的递次打印,第三行根据从左到右的递次打印,其他行以此类推
剖析
第一回响反映能够根据一般的条理遍历然后再把第2、4、6等等偶数层的效果翻转一下,然则那模样效力太低。
上网查阅能够运用双向行列,即两端都能够进和出。须要从左到右打印的从行列头部进入和弹出,须要从右往左打印的从行列尾部进入和弹出
代码完成
/* function TreeNode(x) {
this.val = x;
this.left = null;
this.right = null;
} */
function Print(r)
{
if(r === null)
return [];
var ds = [];
var dir = "r";
var res = [];
ds.unshift(null);
ds.unshift(r);
while(ds.length > 1) {
var temp = [];
if(dir === 'r'){
var cur = ds.shift();
while(cur !== null) {
temp.push(cur.val);
if(cur.left !== null)
ds.push(cur.left);
if(cur.right !== null)
ds.push(cur.right)
cur = ds.shift();
}
ds.unshift(null);
}else{
var cur = ds.pop();
while(cur !== null){
temp.push(cur.val);
if(cur.right !== null)
ds.unshift(cur.right);
if(cur.left !== null)
ds.unshift(cur.left);
cur = ds.pop();
}
ds.push(null);
}
res.push(temp);
dir = dir === "r" ? "l" : "r";
}
return res;
}
module.exports = {
Print : Print
};