胡扯:真好,我上一个题是用 Arraylist集合 来完成的。对于这个题来说,那就是很简单了每次添加到开头,就相当于反过来了。 至于 二叉,还是多叉,无所谓了。
思路:
1、参考上一个多叉树的 层序遍历。N叉树的层序遍历
2、只需要在把每一层的数据 添加到集合的时候。变成 list.add(0,aa); 就好了,这样就成了反序的了。
代码:
List<List<Integer>> arr = new ArrayList<>();
void bfs (List<TreeNode> root){
List<Integer> aa = new ArrayList<>();
for (TreeNode r : root)
aa.add(r.val);
arr.add(0,aa);
List<TreeNode> crr = new ArrayList<>();
for (TreeNode r : root){
if (r.left != null)
crr.add(r.left);
if (r.right != null)
crr.add(r.right);
}
if (crr.size() > 0)
bfs(crr);
}
public List<List<Integer>> levelOrderBottom(TreeNode root) {
if (root == null)
return arr;
List<TreeNode> a = new ArrayList<>();
a.add(root);
bfs( a );
return arr;
}