Binary Tree Zigzag Level Order Traversal

来源:互联网 发布:电子政务网络拓扑图 编辑:程序博客网 时间:2024/06/05 14:19

description:
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).

Have you met this question in a real interview? Yes
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]
]

解题思路:
实用BFS的方式进行搜索处理,将所得到的结果进行按照奇偶层判断是否需要翻转处理。

/** * Definition of TreeNode: * public class TreeNode { *     public int val; *     public TreeNode left, right; *     public TreeNode(int val) { *         this.val = val; *         this.left = this.right = null; *     } * } */public class Solution {    /**     * @param root: The root of binary tree.     * @return: A list of lists of integer include      *          the zigzag level order traversal of its nodes' values      */    public ArrayList<ArrayList<Integer>> zigzagLevelOrder(TreeNode root) {        // write your code here        ArrayList<ArrayList<Integer>> result = new ArrayList<>();        if (root == null) {            return result;        }        Queue<TreeNode> queue = new LinkedList<>();        queue.offer(root);        int index = 0;        while (!queue.isEmpty()) {            ArrayList<Integer> list = new ArrayList<>();            int len = queue.size();            for (int i = 0; i < len; i++) {                TreeNode node = queue.poll();                list.add(node.val);                if (node.left != null) {                    queue.offer(node.left);                }                if (node.right != null) {                    queue.offer(node.right);                }            }            if (index % 2 != 0) {                Collections.reverse(list);            }            index++;            result.add(list);        }        return result;    }}
0 0