按之字形顺序打印二叉树

2019-11-10  本文已影响0人  ElricTang

《剑指offer》刷题笔记。如有更好解法,欢迎留言。

关键字:树的广度遍历(层次遍历)、队列

题目描述:

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

思路:

1. 本题可以在《把二叉树打印成多行》的基础上修改(传送门
2. 至此已完成按层次输出树的数组
3. 题目可以理解为偶数行按照从左到右的顺序打印,奇数行按照从右至左的顺序打印。所以只需要遍历结果数组,将奇数行反转就行了。

function Print(pRoot){
    if(!pRoot)return [];
    let queue = [];
    let map = new Map();
    map.set(pRoot,0);
    queue.push(pRoot);
    while(queue.length){
    let node = queue.shift();
        let deep = map.get(node);
    if(node.left){
            queue.push(node.left);
            map.set(node.left,deep+1);
        }
    if(node.right){
            queue.push(node.right);
            map.set(node.right,deep+1);
        }
    }
    let res = [];
    for(let item of map.entries()){
        let val = item[0];
        let deep = item[1];
        res[deep] = Array.isArray(res[deep]) ? res[deep] : [];
        res[deep].push(val.val);    
    }
    
    for(let i = 0;i < res.length;i++){
        if(i % 2 === 1){
            res[i] = res[i].reverse();
        }   
    }
  return res;
}
上一篇下一篇

猜你喜欢

热点阅读