Binary Tree Zigzag Level Order Traversal

来源:互联网 发布:开淘宝店怎么寻找货源 编辑:程序博客网 时间:2024/06/05 11:08

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]]

confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.


Analysis: It is similar as the binary tree level order traversal, i.e., use BFS. However, the frontier and next here are more suitable for using Stack instead of Queue. We just use a boolean variable as the flag to determine the order to put into the stack (left to right, or, say, right to left). 

/** * Definition for binary tree * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public ArrayList<ArrayList<Integer>> zigzagLevelOrder(TreeNode root) {        ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();        if(root==null) return res;        boolean leftToRight = false;        Stack<TreeNode> frontier = new Stack<TreeNode>();        frontier.push(root);        while(!frontier.isEmpty()) {            Stack<TreeNode> next = new Stack<TreeNode>();            ArrayList<Integer> tem = new ArrayList<Integer>();            while(!frontier.isEmpty()) {                TreeNode current = frontier.pop();                tem.add(current.val);                if(!leftToRight) {  // right to left traversal                    if(current.left!=null) next.push(current.left);                    if(current.right!=null) next.push(current.right);                }                else {              // left to right traversal                    if(current.right!=null) next.push(current.right);                    if(current.left!=null) next.push(current.left);                }            }            res.add(tem);            leftToRight = !leftToRight;            frontier = next;        }        return res;    }}

0 0
原创粉丝点击