给你二叉树的根节点
root
,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)示例 1:
输入:root = [3,9,20,null,null,15,7] 输出:[[15,7],[9,20],[3]]示例 2:
输入:root = [1] 输出:[[1]]示例 3:
输入:root = [] 输出:[]提示:
- 树中节点数目在范围
[0, 2000]
内-1000 <= Node.val <= 1000
java 解题思路及代码
package com.java.leetcode.tree;
import com.java.leetcode.compent.TreeNode;
import java.util.*;
import java.util.stream.Collectors;
/**
* 给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
*
*
*
* 示例 1:
*
*
* 输入:root = [3,9,20,null,null,15,7]
* 输出:[[15,7],[9,20],[3]]
* 示例 2:
*
* 输入:root = [1]
* 输出:[[1]]
* 示例 3:
*
* 输入:root = []
* 输出:[]
*/
public class levelOrderBottom107 {
/**
* 思路 改题目是层序遍历的变种 即 层序遍历数据后反向列表输出即可
* @param root
* @return
*/
public List<List<Integer>> levelOrderBottom(TreeNode root) {
List<List<Integer>> list=new ArrayList<>();
if(root==null){
return list;
}
Deque <TreeNode> dq=new ArrayDeque<>();
dq.offer(root);
while(!dq.isEmpty()){
//开始遍历元素
List<Integer> tmp=new ArrayList<>();
int size=dq.size();
while(size>0){
TreeNode node=dq.poll();
tmp.add(node.val);
if(node.left!=null){
dq.offer(node.left);
}
if(node.right!=null){
dq.offer(node.right);
}
size--;
}
list.add(tmp);
}
//翻转数组
Collections.reverse(list);
return list;
}
}