【刷算法】按照之字形打印二叉树

简介: 【刷算法】按照之字形打印二叉树

题目描述


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


分析


第一反应可以按照普通的层次遍历然后再把第2、4、6等等偶数层的结果翻转一下,但是那样子效率太低。

上网查阅可以使用双向队列,即两头都可以进和出。需要从左到右打印的从队列头部进入和弹出,需要从右往左打印的从队列尾部进入和弹出


代码实现


/* function TreeNode(x) {
    this.val = x;
    this.left = null;
    this.right = null;
} */
function Print(r)
{
    if(r === null)
        return [];
    var ds = [];
    var dir = "r";
    var res = [];
    ds.unshift(null);
    ds.unshift(r);
    while(ds.length > 1) {
        var temp = [];
        if(dir === 'r'){
            var cur = ds.shift();
            while(cur !== null) {
                temp.push(cur.val);
                if(cur.left !== null)
                    ds.push(cur.left);
                if(cur.right !== null)
                    ds.push(cur.right)
                cur = ds.shift();
            }
            ds.unshift(null);
        }else{
            var cur = ds.pop();
            while(cur !== null){
                temp.push(cur.val);
                if(cur.right !== null)
                    ds.unshift(cur.right);
                if(cur.left !== null)
                    ds.unshift(cur.left);
                cur = ds.pop();
            }
            ds.push(null);
        }
        res.push(temp);
        dir = dir === "r" ? "l" : "r";
    }
    return res;
}
module.exports = {
    Print : Print
};



相关文章
|
3月前
|
存储 算法
【数据结构和算法】--- 二叉树(4)--二叉树链式结构的实现(2)
【数据结构和算法】--- 二叉树(4)--二叉树链式结构的实现(2)
26 0
|
3月前
|
存储 算法 Linux
【数据结构和算法】---二叉树(1)--树概念及结构
【数据结构和算法】---二叉树(1)--树概念及结构
34 0
|
23天前
|
算法
【初阶数据结构篇】二叉树算法题
二叉树是否对称,即左右子树是否对称.
|
1月前
|
存储 算法 Java
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
55 0
|
1月前
|
算法 Java
LeetCode初级算法题:子数组最大平均数+二叉树的最小深度+最长连续递增序列+柠檬水找零
LeetCode初级算法题:子数组最大平均数+二叉树的最小深度+最长连续递增序列+柠檬水找零
30 0
|
2月前
|
算法
刷算法Leetcode---9(二叉树篇Ⅲ)
刷算法Leetcode---9(二叉树篇Ⅲ)
25 3
|
3月前
|
算法 分布式数据库
【数据结构和算法】--- 二叉树(5)--二叉树OJ题
【数据结构和算法】--- 二叉树(5)--二叉树OJ题
29 1
|
2月前
|
算法 JavaScript
JS 【详解】二叉树(含二叉树的前、中、后序遍历技巧和算法实现)
JS 【详解】二叉树(含二叉树的前、中、后序遍历技巧和算法实现)
32 0
|
3月前
|
算法
【数据结构和算法】--- 二叉树(3)--二叉树链式结构的实现(1)
【数据结构和算法】--- 二叉树(3)--二叉树链式结构的实现(1)
20 0
|
3月前
|
存储 算法
【数据结构和算法】---二叉树(2)--堆的实现和应用
【数据结构和算法】---二叉树(2)--堆的实现和应用
16 0