java代码实现如下
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<Integer>> levelOrderBottom(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();//创建一个容器用来返回数据
Queue<TreeNode> queue = new ArrayDeque<>();//创建一个队列用来存储节点
if(root != null) queue.add(root);//将根节点入队
while(!queue.isEmpty())
{
List<Integer> level = new ArrayList<>(); //定义数组来保存当前层数据
int n = queue.size();//定义n来记录当前层的节点数
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;
}
}
总结:二叉树层次遍历需要借助队列实现,这是解题基础模板,需要熟练掌握。