> For the complete documentation index, see [llms.txt](https://r24zeng.gitbook.io/leetcode-notebook/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://r24zeng.gitbook.io/leetcode-notebook/wan-quan-an-zhao-jiu-zhang-suan-fa-shua-de-60-dao-zuo-you/iii.-binary-tree/103.-binary-tree-zigzag-level-order-traversal.md).

# 103. Binary Tree Zigzag Level Order Traversal

\# Medium, BFS

{% hint style="success" %}
Most are as same as #102. Set a flag to judge odd or even layer. Once it's even layer, reverse the level then append to result.
{% endhint %}

{% tabs %}
{% tab title="Java(DFS)" %}

```java
class Solution {
    List<List<Integer>> res = new ArrayList<List<Integer>>();
    
    public void DFS(TreeNode root, int level) {
        if(root == null) return;
        
        if(res.size() == level) 
            res.add(new ArrayList<Integer>());
        
        if(level%2 == 1)
            res.get(level).add(0, root.val);
        else
            res.get(level).add(root.val);
        
        if(root.left != null) DFS(root.left, level + 1);
        if(root.right != null) DFS(root.right, level + 1);
    }
    
    public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
        DFS(root, 0);
        return res;
    }
}
```

{% endtab %}

{% tab title="Java(BFS)" %}

```java
class Solution {
    public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
        List<List<Integer>> res = new ArrayList<List<Integer>>();
        if(root == null) return res;
        
        List<Integer> level = new ArrayList<Integer>();
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        int even = 1;
        queue.add(root);
        
        while(!queue.isEmpty()) {
            level = new ArrayList<Integer>();
            int l = queue.size();
            while(l > 0) {
                TreeNode node = queue.poll();
                level.add(node.val);
                if(node.left != null) queue.add(node.left);
                if(node.right != null) queue.add(node.right);
                l --;
            }
            if(even == -1) 
                Collections.reverse(level);
            res.add(level);
            even *= (-1);
        }
        
        return res;
    }
}
```

{% endtab %}
{% endtabs %}
