首页 > 其他分享 >2024.2.16力扣每日一题——二叉树的锯齿形层序遍历

2024.2.16力扣每日一题——二叉树的锯齿形层序遍历

时间:2024-04-01 21:31:04浏览次数:34  
标签:2024.2 16 队列 双端 list queue 二叉树 res null

2024.2.16

题目来源

力扣每日一题;题序:103

我的题解

方法一 双端队列+标志

层序遍历 利用双端队列和标志,判断当前应该往那个方向遍历
注意:在逆向遍历时,加入后续节点到队列中的顺序需要改变

时间复杂度:O(N),其中 N 为二叉树的节点数。每个节点会且仅会被遍历一次。
空间复杂度:O(N)。需要维护存储节点的队列和存储节点值的双端队列,空间复杂度为 O(N)。

public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
    List<List<Integer>> res=new ArrayList<>();
    if(root==null)
        return res;
    LinkedList<TreeNode> queue=new LinkedList<>();
    queue.addFirst(root);
    boolean flag=false;//false表示从右到左,true表示从左到右
    while(!queue.isEmpty()){
        int sz=queue.size();
        List<Integer> list=new ArrayList<>();
        for(int i=0;i<sz;i++){
            //从右到左
            if(!flag){
                TreeNode t=queue.pollLast();
                list.add(t.val);
                if(t.left!=null)
                    queue.addFirst(t.left);
                if(t.right!=null)
                    queue.addFirst(t.right);
            //从左到右
            }else{
                TreeNode t=queue.pollFirst();
                list.add(t.val);
                //注意存入的顺序需要改变
                if(t.right!=null)
                    queue.addLast(t.right);
                if(t.left!=null)
                    queue.addLast(t.left);
                
                
            }
        }
        flag=!flag;
        res.add(list);
    }
    return res;
}

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈

标签:2024.2,16,队列,双端,list,queue,二叉树,res,null
From: https://blog.csdn.net/weixin_42075274/article/details/137239002

相关文章

  • 探索组合总和问题(力扣39,40,216)
    文章目录题目前知LinkedList和ArryayList组合总和I一、思路二、解题方法三、Code组合总和II一、思路二、解题方法三、Code组合总和III一、思路二、解题方法三、Code总结先看完上一期组合问题再看这一期更加容易理解喔......
  • 序列化二叉树
    请实现两个函数,分别用来序列化和反序列化二叉树。您需要确保二叉树可以序列化为字符串,并且可以将此字符串反序列化为原始树结构。数据范围树中节点数量 [0,1000]。样例你可以序列化如下的二叉树8/\122/\64为:"[8,12,2,null,null,6,......
  • 韦东山-数码相框之输出16*16字符
    字符编码字符编码简介字符(character)是计算机与人交互的媒介,人虽然可以看懂二进制串,但文字是更加直观的。所以需要用数字来表示字符,字符与数字的对应关系就叫编码(coding)。ASCII:使用1个字节表示字符,8位二进制一共可表示256个不同的值,但实际只用到了前面的128个位置。GBK:双字......
  • 高抗干扰抗噪,段码LCD液晶低功耗驱动IC-VK2C23B,兼容市面上16C23
    VK2C23是一个点阵式存储映射的LCD驱动器,可支持最大224点(56SEGx4COM)或者最大416点(52SEGx8COM)的LCD屏。单片机可通过I2C接口配置显示参数和读写显示数据,也可通过指令进入省电模式。其高抗干扰,低功耗的特性适用于水电气表以及工控仪表类产品。L23+01特点:•工作电压2.4-5.5V•......
  • ES2016新特性
    ES2016新特性本次更新改变的内容比较少,仅仅新增了includes()方法和简化幂运算的写法。Array.prototype.includesincludes()方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回true,否则返回false。[1,2,3].includes(2);//true[1,2,3].includes(4);//......
  • 代码随想录算法训练营第二十五天(回溯2)|216. 组合总和 III、17. 电话号码的字母组合(JA
    文章目录216.组合总和III解题思路源码17.电话号码的字母组合解题思路源码216.组合总和III找出所有相加之和为n的k个数的组合,且满足下列条件:只使用数字1到9每个数字最多使用一次返回所有可能的有效组合的列表。该列表不能包含相同的组合两次,组合可......
  • 【二叉树】Leetcode 437. 路径总和 III【中等】
    路径总和III给定一个二叉树的根节点root,和一个整数targetSum,求该二叉树里节点值之和等于targetSum的路径的数目。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。示例1:**输入:**root=[10,5,-3,3,2,null,11,3,......
  • excel中怎样把多位16进制数转换成2进制数?
    在excel里,把16进制数字转换成2进制,有内置函数HEX2BIN可以使用,不这个函数只能转2位16进制数,多于2位函数就会报错。HEX2BIN的函数说明是这样:如果参数number为负数,不能小于FFFFFFFE00;如果参数number为正数,不能大于1FF。将数值转换成十进制,就是-512~511,超出这个范围将......
  • Imagemagick 命令注入漏洞(CVE-2016-3714)
    Imagemagick命令注入漏洞(CVE-2016-3714)漏洞介绍漏洞名称:Imagemagick命令注入漏洞(CVE-2016-3714)漏洞定级:高危漏洞描述:ImageMagick在处理恶意构造的图片文件时,对于文件中的URL未经严格过滤,可导致命令注入漏洞。通过命令注入漏洞,黑客可以在服务器上执行任意系统命令,获取服务......
  • 2673. 使二叉树所有路径值相等的最小代价
    思路先看3节点的子树,想要路径值相同,只能修改叶子节点的值,如上图只能2去+1操作。核心思想:那么对于任意左右孩子节点,想要从根节点下来的路径相同,只能修改孩子节点。所以我们只需要从下至上记录叶子节点到当前节点的路径值,然后计算当前节点和右节点的差值。详细看灵神树上贪心......