题目:给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
例如:
给定二叉树 [3,9,20,null,null,15,7],

  • 3
  • / \
  • 9 20
  • / \
  • 15 7

返回其自底向上的层序遍历为:

  • [
  • [15,7],
  • [9,20],
  • [3]
  • ]

    解法1:BFS,使用队列,时间复杂度o(n),空间复杂度o(n)

  1. 使用一个队列,先加入当前root,两层循环,判断条件都是队列是否为null,大循环判断每一层,小循环判断每一层内的每个节点
  2. 在每一层中用一个list依次从左到右加入节点,即取出当前节点加入list,然后按照左右子节点的顺序依次入队
  3. 依次取出当前节点,然后分别把它的左右节点加入到队列
  4. 每层结束时,把结果都插入到结果集的头部即可(这样从上到下就反过来成为从左到右了)
    1. import java.util.*;
    2. class Solution {
    3. LinkedList<List<Integer>> res = new LinkedList<>();
    4. public List<List<Integer>> levelOrderBottom(TreeNode root) {
    5. if(root == null)
    6. return res;
    7. Deque<TreeNode> deque = new LinkedList<>();
    8. deque.add(root);
    9. while(!deque.isEmpty()){
    10. int sz = deque.size();
    11. List<Integer> list = new LinkedList<>();
    12. for(int i = 0 ; i < sz ;i++){
    13. TreeNode node = deque.poll();
    14. list.add(node.val);
    15. if(node.left != null)
    16. deque.add(node.left);
    17. if(node.right != null)
    18. deque.add(node.right);
    19. }
    20. res.addFirst(list);
    21. }
    22. return res;
    23. }
    24. }