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<Integer> arr1=new LinkedList<>();
for (int i=0;i<testTime;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<List<Integer>> levelOrderBottom(TreeNode root){
List<List<Integer>> ans=new LinkedList<>();
if (root==null){ //根部为空,则为空树
return ans;
}
Queue<TreeNode> queue=new LinkedList<>(); // LinkedList实现Queue接口
queue.add(root); //把头结点放入Q中
while (!queue.isEmpty()){
int size=queue.size(); //找到Size
List<Integer> curAns=new LinkedList<>(); //再new一个List
for (int i=0;i<size;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
//按层遍历二叉树,并收集结点
最新推荐文章于 2024-05-31 10:46:10 发布