美文网首页
按之字形顺序打印二叉树

按之字形顺序打印二叉树

作者: ElricTang | 来源:发表于2019-11-10 10:23 被阅读0次

    《剑指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;
    }
    

    相关文章

      网友评论

          本文标题:按之字形顺序打印二叉树

          本文链接:https://www.haomeiwen.com/subject/qwwobctx.html