• (LeetCode一刷)二叉树的锯齿形层次遍历


    注:个人算法比较菜,由于是第一遍刷题,代码质量可能都不好,这里暂时做个刷题记录:)。

    题目:

    给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。

    例如:
    给定二叉树 [3,9,20,null,null,15,7],

    作者:力扣 (LeetCode)
    链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-medium/xvle7s/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    图解:

                     1
                  /     
                2         3
             /         /    
           4      5    6       7
    init two array: larr [1] rarr []
    larr rarr visit node [
    1] [] [] [2, 3] 1 [6,7] [2] 3 [4,5,6,7] [] 2 [5,6,7] [] 4 ... [] ...

    代码:

    function TreeNode(val){
         this.val = val;
         this.left = this.right = null;
    }
    
    /**
     *层次遍历构造二叉树
     */
    function createBinaryTree(arr){
        var p = new TreeNode(arr[0]);
        var k = 0;
        var len = arr.length;
        var buildTree = function(node, i){
           if(2*i+1<len && arr[2*i+1]!==null){
                node.left = new TreeNode(arr[2*i+1]);
                node.left && buildTree(node.left, 2*i+1)
            }
            if(2*i+2<len && arr[2*i+2]!==null){
                node.right = new TreeNode(arr[2*i+2]);
                node.right && buildTree(node.right, 2*i+2);
            }
        };
        buildTree(p, 0);
        return p;
    }
    
    /**
     * @param {TreeNode} root
     * @return {number[][]}
     */
    var zigzagLevelOrder = function(root) {
        if(!root) return [];
        var flag = true;
        var result = [];
        var larr = [root];
        var rarr = [];
        var p = null;
        var tmp = [];   
        while(larr.length>0||rarr.length>0){                   
           if(flag){   
              tmp = [];       
              while(larr.length>0){
                p = larr.shift();        
                p && tmp.push(p.val);
                var tmp2 = [];
                p.left && tmp2.push(p.left);
                p.right && tmp2.push(p.right);
                rarr = rarr.concat(tmp2);           
              }    
              result.push(tmp);     
           }else{   
              tmp = [];    
              while(rarr.length>0){
                p = rarr.pop();    
                p && tmp.push(p.val);
                var tmp2 = [];
                p.left && tmp2.push(p.left);
                p.right && tmp2.push(p.right);
                larr = tmp2.concat(larr);
              }
              result.push(tmp);
           }
           flag=!flag;
        }
        return result;
    };
    
    var arr = [3,9,20,null,null,15,7];
    var tree = createBinaryTree(arr);
    //console.log(tree);
    //var tree = new TreeNode(1);
    var result = zigzagLevelOrder(tree);
    console.log('result',result);
  • 相关阅读:
    2491 玉蟾宫
    1704 卡片游戏
    1020 孪生蜘蛛
    1215 迷宫
    3149 爱改名的小融 2
    1316 文化之旅 2012年NOIP全国联赛普及组
    1664 清凉冷水
    157. [USACO Nov07] 奶牛跨栏
    [SCOI2005]繁忙的都市
    【NOIP2014模拟赛No.1】我要的幸福
  • 原文地址:https://www.cnblogs.com/davidxu/p/13548400.html
Copyright © 2020-2023  润新知