- 和层序遍历相似的地方在于都是利用队列的来实现节点的依次进入,并在节点出队列时将左右子节点入队列;
- 不同的地方在于通过记录每层节点的数目(队列长度)来判断层数,当层数为偶数时,翻转该层的输出顺序。
/* function TreeNode(x) {
this.val = x;
this.left = null;
this.right = null;
} */
function Print(pRoot)
{
// write code here
let result = []; // 输出的二维数组
let arr = []; // 每层的输出
let layer = 1; // 记录第几层
let queue = []; // 节点依次进入队列
if (pRoot) {
queue.push(pRoot);
while (queue[0]) {
arr = [];
let queueLen = queue.length;
for (let i = 0; i < queueLen; i++) {
let node = queue.shift();
arr.push(node.val);
if (node.left) {
queue.push(node.left)
}
if (node.right) {
queue.push(node.right)
}
}
if (layer % 2 == 0) {
result.push(arr.reverse());
} else {
result.push(arr);
}
layer++;
}
}
return result
}
module.exports = {
Print : Print
};