Java集合元素的反转问题

Java集合元素的反转

上午刷了几题Leecode其中107题《二叉树的层序遍历II》
题目链接:二叉树的层序遍历II
这题看输入输出明显是一个要用到集合与二叉树的数据结构的题。
此题的关键在于遍历每层后将节点的值存放在集合中,最后将每层每个集合存放于res集合中。但题目要求从叶子节点层开始遍历保存,而不是从根节点开始。
我的思路是先使用一个函数实现自上向下层序遍历节点并用集合保存,毕竟这还是比较容易实现的。代码如下

    public  void cx(TreeNode root,List<List<Integer>> res){
     LinkedList<TreeNode> que=   new LinkedList<>();
     if(root!=null){
         que.offer(root);
     }
     while(!que.isEmpty()){
         int n=que.size();
         List<Integer> path=new ArrayList<>(); 
         for(int i=0;i<n;i++){
              TreeNode node =que.poll();
           path.add(node.val);
             if(node.left!=null){
                que.offer(node.left);
             }
             if(node.right!=null){
                 que.offer(node.right);
             }   
         }
         res.add(path);
     }
    }

这样就实现了二叉树的普通层序遍历输出,接着我们只要将保存的res集合中的元素(这里也是Integer的一个集合)反转一下就可以得到题目的输出。
集合的反转这里就需要自己造轮子了,下面给出一个效率还可以的一种方法将集合中元素第一个与size()-1交换,第二个与size()-2交换,依次交换下去,这里注意交换需要需要定一个临时的集合来操作。代码如下:

      for(int i=0,j=res.size()-1;i<j;i++,j--){
          List<Integer> temp= res.get(i);
          res.set(i,res.get(j));
          res.set(j,temp);
      }

一开始以为这种思路可能通过不了或时间复杂度很高,没想到居然效率还行。这可能是得益于集合的反转效率比较高。
在这里插入图片描述
上述是本弱鸡的解题的思路,普通人就能想到的,题解中还有很多大佬们双百的题解,直接在二叉树遍历时存储,不需要得到集合再逆序。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值