> For the complete documentation index, see [llms.txt](https://heunnajo.gitbook.io/algorithms-problem-solving-skills/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://heunnajo.gitbook.io/algorithms-problem-solving-skills/stack-and-queue/binary-tree-level-order-traversal.md).

# Binary Tree Level Order Traversal

Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).

![](/files/-MPDHalSTtSjQaQFbmtT)

**Input** :\
&#x20;   3\
&#x20;  / \\\
&#x20; 4  5\
&#x20;/\\\
6  7\
**Output** : \[\[3], \[4,5],\[6,7]]

**자료구조** : **Queue(FIFO) - BFS(너비우선),  Stack(FILO) - DFS(깊이우선)**

**알고리즘**\
0\. 큐의 사이즈 체크!, 리스트 생성! - level별로 뺄것이기 때문에 level 별로 리스트 생성한다.(큐에서 빼내는 반복문 들어가기 전에 리스트를 생성한다.)\
1\. 큐에 노드 넣는다.\
2\. 노드 빼면서 왼쪽과 오른쪽에 노드가 있는지 확인한다. - 왼/오 순서는 문제에서 제시.\
&#x20;   노드 빼면서 문제에서 제시된 순서(여기서는 왼->오)로 노드 다시 넣는다.

**알고리즘을 Java로 구현**

```java
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        //left->right : BFS, BFS = Queue!
        List<List<Integer>> result = new ArrayList<>();
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        
        //큐가 빌 때까지 큐에 노드 넣고 빼는 것을 반복한다.
        while(!queue.isEmpty()) {
            int size = queue.size();
            List<Integer> list = new ArrayList<>();
            for(int i=0;i<size;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);}
            }
            result.add(list);
        }
        return result;
    }
}
```
