Binary Tree level order traversal II
Given a binary tree, returnBottom-up level orderTraversal 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:
[ [15,7], [9,20], [3]]
Algorithm ideas:
The typical BFS is exactly the same as the [leetcode] binary tree level order traversal, but one is the list header insertion and the other is the tail insertion method.
The Code is as follows:
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 }