【leetcode 刷题 第七天】搜索与回溯算法

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;
    }
}

队列解法: 将二叉树层序遍历,使用队列来储存,先进先处理

  1. 特例处理: 当树的根节点为空,则直接返回空列表 [] ;
  2. 初始化: 打印结果列表 res = [] ,包含根节点的队列 queue = [root] ;
  3. BFS 循环: 当队列 queue 为空时跳出;
  4. 出队: 队首元素出队,记为 node;
  5. 打印: 将 node.val 添加至列表 tmp 尾部;
  6. 添加子节点: 若 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;
    }```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值