码迷,mamicode.com
首页 > 其他好文 > 详细

【树】Binary Tree Zigzag Level Order Traversal

时间:2016-02-07 02:12:37      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:

题目:

Given a binary tree, return the zigzag level order traversal of its nodes‘ values. (ie, from left to right, then right to left for the next level and alternate between).

For example:
Given binary tree {3,9,20,#,#,15,7},

    3
   /   9  20
    /     15   7

 

return its zigzag level order traversal as:

[
  [3],
  [20,9],
  [15,7]
]

思路:

首先肯定的是要对树进行层序遍历,但是相邻两层的元素遍历顺序是相反的,因此传统的非递归遍历方法用一个队列肯定是无法实现。我们用两个栈来实现,同一层元素都在同一个栈中,相邻的两层元素放在不同的栈中,比如第一层元素放在第一个栈,那么第二层就放在第二个栈,第三层再放在第一个栈......如果某一层元素是从左往右遍历的,那么这层元素的孩子节点入栈顺序就是先左孩子后右孩子,相反如果某一层元素是从右往左遍历的,入栈顺序就是先右孩子后左孩子。

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[][]}
 */
var zigzagLevelOrder = function(root) {
    var res=[],tempres=[];
    if(root==null){
        return res;
    }
    var s1=[],s2=[];
    s1.push(root);
    var flag=true;
    
    while(s1.length!=0||s2.length!=0){
        var p=null;
        
        if(flag){
            p=s1.pop();
            tempres.push(p.val);
            if(p.left){
                s2.push(p.left);
            }
            if(p.right){
                s2.push(p.right);
            }
            if(s1.length==0){
                var temp=[];
                for(var i=0,len=tempres.length;i<len;i++){
                    temp[i]=tempres[i];
                }
                res.push(temp);
                tempres.length=0;
                flag=false;
            }
        }else{
            p=s2.pop();
            tempres.push(p.val);
            if(p.right){
                s1.push(p.right);
            }
            if(p.left){
                s1.push(p.left);
            }
            if(s2.length==0){
                var temp=[];
                for(var i=0,len=tempres.length;i<len;i++){
                    temp[i]=tempres[i];
                }
                res.push(temp);
                tempres.length=0;
                flag=true;
            }
        }
    }
    
    return res;
};

 

【树】Binary Tree Zigzag Level Order Traversal

标签:

原文地址:http://www.cnblogs.com/shytong/p/5184419.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!