您的位置:首页 > 其它

LeetCode 103 Binary Tree Zigzag Level Order Traversal

2015-11-26 11:00 489 查看

题目描述

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},



return its zigzag level order traversal as:



分析

参考LeetCode 102 Binary Tree Level Order Traversal

只需要加入一个变量,判断行数,翻转list即可。

代码

[code]    public static List<List<Integer>> zigzagLevelOrder(TreeNode root) {

        List<List<Integer>> result = new ArrayList<List<Integer>>();

        if (root == null) {
            return result;
        }

        final TreeNode END = new TreeNode(0);

        Deque<TreeNode> deque = new LinkedList<TreeNode>();
        List<Integer> level = new LinkedList<Integer>();
        int count = 0;

        deque.add(root);
        deque.add(END);

        while (!deque.isEmpty()) {

            TreeNode p = deque.pop();

            if (p == END) {

                if (count % 2 == 1) {
                    Collections.reverse(level);
                }

                count++;

                result.add(new ArrayList<Integer>(level));
                level.clear();

                if (!deque.isEmpty()) {
                    deque.add(END);
                }
            } else {
                level.add(p.val);

                if (p.left != null) {
                    deque.add(p.left);
                }

                if (p.right != null) {
                    deque.add(p.right);
                }
            }
        }

        return result;
    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: