leetcode刷题第七天
第一道
开始我使用了递归的方法去写,结果leetcode一直报很奇怪的错,我就使用了队列来解
//一直报错 不知道为什么
class Solution {
public static List list= new ArrayList<Integer>();
public static int[] levelOrder(TreeNode root) {
if(root!=null){
recur(root);
}
int [] nums = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
nums[i]=(int)list.get(i);
}
return nums;
}
public static int recur(TreeNode treeNode){
if(treeNode==null){
return 0;
}
list.add(treeNode.val);
int left = recur(treeNode.left);
int recur = recur(treeNode.right);
return 0;
}
}
队列解法: 将二叉树层序遍历,使用队列来储存,先进先处理
- 特例处理: 当树的根节点为空,则直接返回空列表 [] ;
- 初始化: 打印结果列表 res = [] ,包含根节点的队列 queue = [root] ;
- BFS 循环: 当队列 queue 为空时跳出;
- 出队: 队首元素出队,记为 node;
- 打印: 将 node.val 添加至列表 tmp 尾部;
- 添加子节点: 若 node 的左(右)子节点不为空,则将左(右)子节点加入队列 queue
public static int[] levelOrder(TreeNode root) {
if(root==null) {
return new int[0];
}
Queue<TreeNode> queue = new LinkedList<>();
ArrayList list = new ArrayList<Integer>();
queue.add(root);
//注意 isempty 和 null 区别
while (!queue.isEmpty()){
TreeNode treeNode = queue.poll();
list.add(treeNode.val);
if(treeNode.left!=null){
queue.add(treeNode.left);
}
if(treeNode.right!=null){
queue.add(treeNode.right);
}
}
int[] nums = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
nums[i]=(Integer) list.get(i);
}
return nums;
}
第二道
public List<List<Integer>> levelOrder(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
List<List<Integer>> lists = new ArrayList<>();
//只有root不为空才加入
if(root!=null){
queue.add(root);
}
//注意 isempty 和 null 区别
while (!queue.isEmpty()){
ArrayList<Integer> arrayList = new ArrayList<>();
//遍历队列加入的所有元素。
for (int size = queue.size(); size > 0; size--) {
TreeNode treeNode = queue.poll();
arrayList.add(treeNode.val);
if(treeNode.left!=null){
queue.add(treeNode.left);
}
if(treeNode.right!=null){
queue.add(treeNode.right);
}
}
lists.add(arrayList);
}
return lists;
}
第三道
不断题目特性,根据reverse
public List<List<Integer>> levelOrder(TreeNode root) {
int count=1;
Queue<TreeNode> queue = new LinkedList<>();
List<List<Integer>> lists = new ArrayList<>();
if(root!=null){
queue.add(root);
}
//注意 isempty 和 null 区别
while (!queue.isEmpty()){
ArrayList<Integer> arrayList = new ArrayList<>();
//遍历队列加入的所有元素。
for (int size = queue.size(); size > 0; size--) {
TreeNode treeNode = queue.poll();
arrayList.add(treeNode.val);
if(treeNode.left!=null){
queue.add(treeNode.left);
}
if(treeNode.right!=null){
queue.add(treeNode.right);
}
}
if(lists.size()%2==1){
Collections.reverse(arrayList);
}
lists.add(arrayList);
}
return lists;
}```