您的位置:首页 > 其它

Leetcode-Binary Tree Level Order Traversal II

2014-10-23 09:50 357 查看
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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: