【刷算法】根据之字形打印二叉树

问题形貌

请完成一个函数根据之字形打印二叉树,即第一行根据从左到右的递次打印,第二层根据从右至左的递次打印,第三行根据从左到右的递次打印,其他行以此类推

剖析

第一回响反映能够根据一般的条理遍历然后再把第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
};
    原文作者:亚古
    原文地址: https://segmentfault.com/a/1190000015653614
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞