/* Author: Andy, nkuwjg@gmail.com Date: Dec 12, 2014 Problem: Binary Tree Level Order Traversal Difficulty: easy Source: https://oj.leetcode.com/problems/binary-tree-level-order-traversal/ Notes: Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level). For example: Given binary tree {3,9,20,#,#,15,7}, 3 / \ 9 20 / \ 15 7 return its level order traversal as: [ [3], [9,20], [15,7] ] Solution: 1. Use queue. In order to seperate the levels, use 'NULL' as the end indicator of one level. 2. DFS. */ /** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public List> levelOrder_1(TreeNode root) { List> res = new ArrayList>(); if (root == null) return res; Queue q = new LinkedList(); q.offer(root); q.offer(null); List level = new ArrayList(); while(true) { TreeNode node = q.poll(); if (node != null) { level.add(node.val); if(node.left!=null) q.offer(node.left); if(node.right!=null) q.offer(node.right); } else { res.add(level); level = new ArrayList(); if(q.isEmpty()==true) break; q.offer(null); } } return res; } public List> levelOrder_2(TreeNode root) { List> res = new ArrayList>(); if (root == null) return res; levelOrderRe(root, 0, res); return res; } public void levelOrderRe(TreeNode root, int level, List> res) { if(root == null) return; if(level == res.size()) res.add(new ArrayList()); res.get(level).add(root.val); levelOrderRe(root.left, level+1, res); levelOrderRe(root.right,level+1, res); } }