Leetcode: binary-tree-zigzag-level-order-traversal

来源:互联网 发布:淘宝视频课程下载 编辑:程序博客网 时间:2024/05/17 23:48

题目:



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.


分析:

本题是树的层次遍历的一个变体,目的是希望在树层次遍历的基础上,偶数层逆序遍历。因此需要一个辅助队列进行树结点的存储,然后将每一层的结点值保存在一个ArrayList中,判断是否是偶数层,若是偶数层则将ArrayList中的元素逆序存储。


具体的代码如下:


/** * Definition for binary tree * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */import java.util.LinkedList;import java.util.ArrayList;import java.util.Collections;public class Solution {    public ArrayList<ArrayList<Integer> > zigzagLevelOrder(TreeNode root) {        ArrayList<ArrayList<Integer> > ans = new ArrayList<ArrayList<Integer> >();                if (root == null)            return ans;                LinkedList<TreeNode> q = new LinkedList<TreeNode>();        q.add(root);                boolean flag = true;        while(!q.isEmpty()){            int len = q.size();            ArrayList<Integer> tmp = new ArrayList<Integer>();                        while(len > 0){                TreeNode ln = q.poll();                                if (ln.left != null){                    q.add(ln.left);                }                                if (ln.right != null){                    q.add(ln.right);                }                                tmp.add(ln.val);                                len--;                                }                        if (flag == true){                ans.add(tmp);                flag = false;            }            else{                Collections.reverse(tmp);                ans.add(tmp);                flag = true;            }                    }                return ans;    }}



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.