最近在搞算法,也是在网上找了很多的资源去学习,下面就分享一道leetcode的算法题,也算提供一种思路。
给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
例如:
给定二叉树 [3,9,20,null,null,15,7],
这道二叉树的题目我们就借助队列来完成
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; } }
下面的过程希望帮助大家理解,字有点丑,见谅,本来想做动图的,但是有点费时间,所以别人的原创作品真的值得尊敬,所以不要随便抄袭别人的成果。