102. Binary Tree Level Order Traversal
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] ]
confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.
---
1. recursion
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) { ArrayList<ArrayList<Integer>> rst = new ArrayList<ArrayList<Integer>>(); helper(root, 0, rst); return rst; } private void helper(TreeNode node, int level, ArrayList<ArrayList<Integer>> rst){ if(node == null) return; ArrayList<Integer> list = null; if(rst.size() == level){ // Base case list = new ArrayList<Integer>(); list.add(node.val); rst.add(list); }else{ list = rst.get(level); list.add(node.val); } helper(node.left, level+1, rst); helper(node.right, level+1, rst); } }
2. Iteration
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) { ArrayList<ArrayList<Integer>> rst = new ArrayList<ArrayList<Integer>>(); ArrayList<Integer> curVal = new ArrayList<Integer>(); ArrayList<TreeNode> cur = new ArrayList<TreeNode>(); if(root == null) return rst; // add root cur.add(root); curVal.add(root.val); while(!cur.isEmpty()){ // add parent level rst.add(curVal); //go to next leve ArrayList<TreeNode> parents = cur; cur= new ArrayList<TreeNode>(); curVal = new ArrayList<Integer>(); for(TreeNode p : parents){ // !!! check if null if(p.left != null){ cur.add(p.left); curVal.add(p.left.val); } if(p.right != null){ cur.add(p.right); curVal.add(p.right.val); } } } return rst; } }
浙公网安备 33010602011771号