问题描述:
给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
例如:
给定二叉树 [3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
返回其自底向上的层次遍历为:
[ [15,7], [9,20], [3] ]
说是简单题,我可没觉得怎么简单,还是废了些脑力的。代码一看就懂,还是从大神那里获得的想法。
这是非递归的实现,递归的自己没想出来
public List<List<Integer>> levelOrderBottom(TreeNode root) {
LinkedList<List<Integer>> res = new LinkedList<>();
Queue<TreeNode> q = new LinkedList<>();
if(root == null){
return res;
}
q.add(root);
while(!q.isEmpty()){
int size = q.size();
List<Integer> list = new ArrayList<>();
for (int i = 0; i < size ; i++) {
TreeNode t = q.poll();
list.add(t.val);
if(t.left!=null){
q.add(t.left);