最近在搞算法,也是在网上找了很多的资源去学习,下面就分享一道leetcode的算法题,也算提供一种思路。
给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
例如:
给定二叉树 [3,9,20,null,null,15,7],
题目链接
https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/
这道二叉树的题目我们就借助队列来完成
class Solution {
public List<List<Integer>> levelOrderBottom(TreeNode root) {
//保存得到的结果
List<List<Integer>> resList = new ArrayList<>();
//判断是否为空
if(root==null){
return resList;
}
//创建一个队列,借助队列来完成层级的遍历
Queue<TreeNode> queue = new LinkedList<>();
//offer在尾部添加元素
queue.offer(root);
//当队列不为空时,则
while(!queue.isEmpty()){
//创建一个List
List<Integer> integerList=new ArrayList<>();
//获取queue的长度
int len = queue.size();
//当len大于0进入循环
while(len>0){
//poll删除并返回
TreeNode tpnode = queue.poll();
//将tpnode的值加入到刚才创建的列表里面
integerList.add(tpnode.val);
//然后分别加入左右子树
if(tpnode.left != null){
queue.offer(tpnode.left);
}
if(tpnode.right !=null){
queue.offer(tpnode.right);
}
//这里减去已经出来的第一个结点
len--;
}
resList.add(integerList);
}
//从后往前遍历再放入新数组里面
List<List<Integer>> result = new ArrayList<>();
for (int i = resList.size() - 1; i >= 0; i-- ) {
result.add(resList.get(i));
}
return result;
}
}
下面的过程希望帮助大家理解,字有点丑,见谅,本来想做动图的,但是有点费时间,所以别人的原创作品真的值得尊敬,所以不要随便抄袭别人的成果。
大家可以自己动手写一写,自己的写出来才是自己的
大家想学习二叉树也可以看这个网站
代码随想录https://programmercarl.com/0102.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E5%B1%82%E5%BA%8F%E9%81%8D%E5%8E%86.html