剑指offer_之字形打印二叉树

142 阅读1分钟

请实现一个函数按照之字形顺序从上向下打印二叉树。

即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。

输入如下图所示二叉树[8, 12, 2, null, null, 6, 4, null, null, null, null]
    8
   / \
  12  2
     / \
    6   4
输出:[[8], [2, 12], [6, 4]]

code

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[][]}
 */
var printFromTopToBottom = function(root) {
    if (!root) return []
    const q = [[root,0]]
    const res = []
    while(q.length) {
        const [node, lev] = q.shift() //从队头取出
        if(!res[lev]) res[lev] = []
        //奇数偶数层
        if(lev % 2 == 1) {
            res[lev].unshift(node.val)
        } else {
            res[lev].push(node.val)
        }
        // 左右节点入队
        if(node.left) q.push([node.left,lev+1])
        if(node.right) q.push([node.right,lev+1])
    }
    return res
};