按之字形顺序打印二叉树(层级遍历,正反队列,JS)

按之字形顺序打印二叉树

http://www.nowcoder.com/questionTerminal/91b69814117f4e8097390d107d2efbe0

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

主要还是一个二叉树层级遍历的思路,可参考下方链接:
https://blog.csdn.net/romeo12334/article/details/81335488

思路:
奇数层:取队头,将左右节点插入队尾中,将值插入level数组中,相当于从左到右遍历,
偶数层:取队尾,将其右节点插入队头,再将左节点插入队头,将队尾值插入level数组中,相当于从右到左遍历
主要就是将队列当作双向出口,队头出来的就是从左到右,那么队尾出来的就是从右到左

/* function TreeNode(x) {
    this.val = x;
    this.left = null;
    this.right = null;
} */
function Print(pRoot)
{
    // write code here
    let result = []
    let queue = []
    let count = 1
    if(pRoot != null){
        queue.push(pRoot)
    }
    while(queue.length !== 0) {
        let len = queue.length
        let level = []
        for(let i=0;i<len;i++){
            let cNode = null
            if(count%2==1){
                cNode = queue.shift()
                level.push(cNode.val)
                if(cNode.left != null)queue.push(cNode.left)
                if(cNode.right != null)queue.push(cNode.right)
             }else{
                 cNode = queue.pop()
                 level.push(cNode.val)
                 if(cNode.right != null)queue.unshift(cNode.right)
                 if(cNode.left != null)queue.unshift(cNode.left)
             }

        }
        count++;
        result.push(level)
    }
    return result;
}
module.exports = {
    Print : Print
};
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务