给你二叉树的根节点
root
,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
中等难度,这道题实际上就是102. 二叉树的层序遍历的变种,先学会了102,那么这道题就简单了。
我们只需要将最终结果反转即可,当然,返回的List也可以使用LinkedList,这样就可以使用addList方法实现结果的反转。
public List<List<Integer>> levelOrderBottom( TreeNode root ){
//使用LinkedList而不是ArrayList
LinkedList<List<Integer>> lists = new LinkedList<>();
if( root == null ){
return lists;
}
LinkedList<TreeNode> nodes = new LinkedList<>();
nodes.add( root );
while( !nodes.isEmpty() ){
int size = nodes.size();
ArrayList<Integer> nums = new ArrayList();
for( int i = 0; i < size; i++ ){
TreeNode node = nodes.removeFirst();
nums.add( node.val );
if( node.left != null ){
nodes.addLast( node.left );
}
if( node.right != null ){
nodes.addLast( node.right );
}
}
//使用addFirst,让遍历结果反转
lists.addFirst( nums );
}
return lists;
}