典型的二叉树遍历问题,这类题型,首先我们要熟练掌握二叉树的遍历,加入相应的进出队列算法。思考这道题开始我使用了最简单的做法,将原始的层序遍历算法数组反转即可。代码如下:执行效果高于官方解法,简单易懂,还是要打好基础!加油!
public List<List<Integer>> levelOrderBottom(TreeNode root) {
//创建存储二叉树节点数据的list集合和二叉树节点的集合
List<List<Integer>> res = new ArrayList<>();
Queue<TreeNode> queue = new ArrayDeque<>();
if(root == null) return res;
if(root != null) {
queue.add(root);
}
while(!queue.isEmpty()){
int n = queue.size();
List<Integer> level = new ArrayList<>();
//依次将二叉树的左右子树进入队列,然后存储节点的数据值
for(int i=0;i<n;i++) {
TreeNode node = queue.poll();
level.add(node.val);
if(node.left!=null) {
queue.add(node.left);
}
if(node.right!=null) {
queue.add(node.right);
}
}
res.add(level);
}
//反转集合的值
Collections.reverse(res);
return res;
}