题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推
分析
第一反应可以按照普通的层次遍历然后再把第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
};
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。