• 和层序遍历相似的地方在于都是利用队列的来实现节点的依次进入,并在节点出队列时将左右子节点入队列;
  • 不同的地方在于通过记录每层节点的数目(队列长度)来判断层数,当层数为偶数时,翻转该层的输出顺序。
/* 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
};