题目:给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
例如:
给定二叉树 [3,9,20,null,null,15,7],
- 3
- / \
- 9 20
- / \
- 15 7
返回其自底向上的层序遍历为:
- 使用一个队列,先加入当前root,两层循环,判断条件都是队列是否为null,大循环判断每一层,小循环判断每一层内的每个节点
- 在每一层中用一个list依次从左到右加入节点,即取出当前节点加入list,然后按照左右子节点的顺序依次入队
- 依次取出当前节点,然后分别把它的左右节点加入到队列
- 每层结束时,把结果都插入到结果集的头部即可(这样从上到下就反过来成为从左到右了)
import java.util.*;class Solution {LinkedList<List<Integer>> res = new LinkedList<>();public List<List<Integer>> levelOrderBottom(TreeNode root) {if(root == null)return res;Deque<TreeNode> deque = new LinkedList<>();deque.add(root);while(!deque.isEmpty()){int sz = deque.size();List<Integer> list = new LinkedList<>();for(int i = 0 ; i < sz ;i++){TreeNode node = deque.poll();list.add(node.val);if(node.left != null)deque.add(node.left);if(node.right != null)deque.add(node.right);}res.addFirst(list);}return res;}}
