- package layerTraversal;
-
- import com.sun.org.apache.bcel.internal.generic.RETURN;
-
- import java.util.LinkedList;
- import java.util.List;
- import java.util.Queue;
-
- /**
- * @author 真他喵的学不动咯
- * @create 2022-08-15--21:11
- */
- public class layer { //按层遍历二叉树,并收集结点
- //https://leetcode.cn/problems/binary-tree-level-order-traversal-ii/
-
- /*
- 1.拿出此时队列的Size,Size有多少个,(2)执行多少回
- 2.弹出结点,先左再右
- */
- public static void main(String[] args){
- int testTime=1000;
- LinkedList
arr1=new LinkedList<>(); - for (int i=0;i
- arr1.add(0,i); //把每个元素都加再最前面
- }
- }
-
- //
- public static class TreeNode{
- public int val;
- public TreeNode left;
- public TreeNode right;
- TreeNode(int val){
- this.val=val;
- }
- }
- //
- public List
> levelOrderBottom(TreeNode root){
- List
> ans=new LinkedList<>();
- if (root==null){ //根部为空,则为空树
- return ans;
- }
- Queue
queue=new LinkedList<>(); // LinkedList实现Queue接口 - queue.add(root); //把头结点放入Q中
- while (!queue.isEmpty()){
- int size=queue.size(); //找到Size
- List
curAns=new LinkedList<>(); //再new一个List - for (int i=0;i
//size要找对 ,不能用动态的size>>queue.size,而是每次固定的size - TreeNode curNode=queue.poll(); //弹出节点
- curAns.add(curNode.val); //添加值
- if (curNode.left!=null){ //有左先加左
- queue.add(curNode.left);
- }
- if(curNode.right!=null){ //有右再加右
- queue.add(curNode.right);
- }
- ans.add(0,curAns); //每次都放在最前面
- }
- return ans;
- }
- }
- }
- //一般,用双端队列替代栈结构,这样更快,让双端队列从尾部入尾部出模拟栈
-
- //day07 00''21''05