[leetcode]Binary Tree Level Order Traversal II
Binary Tree Level Order Traversal II
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).
For example:
Given binary tree{3,9,20,#,#,15,7}
,3 / \ 9 20 / \ 15 7
return its bottom-up level order traversal as:
[ [15,7], [9,20], [3] ]
算法思路:
典型的BFS,与[leetcode]Binary Tree Level Order Traversal完全一样,不过一个是对list的头插,一个是尾插法。
代码如下:
1 public class Solution { 2 public List<List<Integer>> levelOrderBottom(TreeNode root) { 3 List<List<Integer>> res = new LinkedList<List<Integer>>(); 4 if(root == null) return res; 5 Queue<TreeNode> q = new LinkedList<TreeNode>(); 6 Queue<TreeNode> copy = new LinkedList<TreeNode>(); 7 q.offer(root); 8 res.add(new ArrayList<Integer>(Arrays.asList(root.val))); 9 while(!q.isEmpty()){ 10 TreeNode node = q.poll(); 11 if(node.left != null) copy.offer(node.left); 12 if(node.right != null) copy.offer(node.right); 13 if(q.isEmpty() && !copy.isEmpty()){ 14 List<Integer> list = new ArrayList<Integer>(); 15 while(!copy.isEmpty()){ 16 q.offer(copy.peek()); 17 list.add(copy.poll().val); 18 } 19 res.add(0,list); 20 } 21 } 22 return res; 23 } 24 }