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] ]分析:在層次遍歷的基礎上增加了對結果的一個翻轉。
AC代碼:
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
public class Solution {
public List<List<Integer>> levelOrderBottom(TreeNode root) {
List<List<Integer>> answerList = new ArrayList<List<Integer>>();
Queue<TreeNode> q = new LinkedList<TreeNode>();
TreeNode nextLevelStarter;
q.add(root);
if( root == null )
return answerList;
while( !q.isEmpty() ){
TreeNode currentNode = q.peek();
nextLevelStarter = null;
List<Integer> thisLevelList = new ArrayList<Integer>();
//find nextLevelStart
while( q.peek() != nextLevelStarter && q.isEmpty() == false ){
currentNode = q.remove();
if( nextLevelStarter == null ){
if( currentNode.left != null )
nextLevelStarter = currentNode.left;
else if( currentNode.right != null )
nextLevelStarter = currentNode.right;
}
//add to the thisLevelList
thisLevelList.add(currentNode.val);
if( currentNode.left != null )
q.add(currentNode.left);
if( currentNode.right != null )
q.add(currentNode.right);
}
answerList.add(thisLevelList);
}
//reverse the result list
List<List<Integer>> reverseAnswerList = new ArrayList<List<Integer>>();
for( int i = answerList.size()-1; i >= 0 ; i-- ){
reverseAnswerList.add(answerList.get(i));
}
return reverseAnswerList;
}
}