Binary Tree Zigzag Level Order Traversal

题目分析

原题链接,登陆 LeetCode 后可用
这道题目根本上是二叉树的层次遍历。额外的要求是,自顶层到底层,假设层数编号从 1 开始,偶数层需要对该层的结果进行反转。这里借助队列实现。

代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public List> zigzagLevelOrder(TreeNode root) {
        
        List> res = new ArrayList<>();
        Queue q = new LinkedList<>();
        
        TreeNode t = root;
        if(t != null) {
            q.offer(t);    
        } else {
            return res;
        }
        
        boolean reverse = false;
        
        while(!q.isEmpty()) {
            
            List level = new ArrayList<>();
            Queue next = new LinkedList<>();
            
            while(!q.isEmpty()) {
                t = q.poll();
                level.add(t.val);
                if(t.left != null) {
                    next.offer(t.left);
                }
                if(t.right != null) {
                    next.offer(t.right);
                }
            }
            
            if(reverse) {
                Collections.reverse(level);
            }
            reverse = !reverse;
            res.add(level);
            q = next;
        }
        
        return res;
        
    }
}

你可能感兴趣的:(Binary Tree Zigzag Level Order Traversal)