当前位置: 首页> 健康> 知识 > 推广引流渠道方法_ocr是不是用于制作网页的软件_搜索引擎优化解释_长春百度快速优化

推广引流渠道方法_ocr是不是用于制作网页的软件_搜索引擎优化解释_长春百度快速优化

时间:2025/7/10 9:09:32来源:https://blog.csdn.net/coldasice342/article/details/144069392 浏览次数:0次
推广引流渠道方法_ocr是不是用于制作网页的软件_搜索引擎优化解释_长春百度快速优化

在这里插入图片描述

算法思想:

这段代码实现了 二叉树的锯齿形层序遍历,其核心思想是基于广度优先搜索(BFS)进行层序遍历,并根据当前层数决定从左到右或从右到左的顺序来组织每一层的节点值。

level.addlevel.addFirst 有点类似单链表的头插法和尾插法

详细步骤:
  1. 树节点定义
    定义了一个 TreeNode 类来表示二叉树的节点,每个节点包含:

    • val:节点的值
    • left:左子节点
    • right:右子节点
  2. 主算法逻辑

    • 定义了一个 zigzagLevelOrder 方法,用来执行锯齿形层序遍历。
    • 输入:二叉树的根节点 root
    • 输出:一个嵌套的列表 List<List<Integer>>,表示每一层的节点值,按照锯齿形排列。
  3. 初始化

    • 如果 root 为空,直接返回空列表。
    • 创建一个 Queue(队列)用来辅助进行层序遍历,并将根节点入队。
    • 定义一个布尔变量 leftToRight,初始为 true,用来表示当前层是否按从左到右的顺序进行。
  4. 按层遍历(循环处理每一层)

    • 在队列不为空的情况下,每次处理一整层的节点:
      • 获取当前层的节点数 size(队列长度)。
      • 创建一个 LinkedList 来存储当前层的节点值。
      • 遍历当前层的所有节点:
        • 从队列中取出节点。
        • 如果是从左到右(leftToRighttrue),直接将节点值追加到列表末尾。
        • 如果是从右到左,将节点值插入到列表头部(通过 addFirst 方法实现)。
        • 将当前节点的左右子节点(如果存在)加入队列,供下一层遍历使用。
    • 将当前层的列表加入最终结果 result
    • 翻转布尔变量 leftToRight,切换到下一层的遍历顺序。
  5. 返回结果

    • 最后返回 result,包含每一层的节点值。
核心优化点:
  • 锯齿形插入
    • 通过 LinkedListaddaddFirst 方法灵活控制节点值的插入顺序,而无需额外对结果进行反转操作。
  • 层序遍历的 BFS 实现
    • 利用队列实现按层处理,每一层结束后通过 leftToRight 切换方向,确保按照锯齿形顺序遍历。

算法复杂度分析:

  1. 时间复杂度

    • 每个节点被访问一次,且每次访问操作的插入复杂度为 (O(1)) 或 (O(1))(在 LinkedList 的头部或尾部操作)。
    • 总时间复杂度为 (O(N)),其中 (N) 是二叉树的节点数。
  2. 空间复杂度

    • 主要由队列的存储和结果列表 result 决定。
    • 在最坏情况下(例如完全二叉树的最后一层),队列可能需要存储 (O(N)) 个节点。
    • 空间复杂度为 (O(N))。

示例运行过程(输入示例中的树):

输入树结构:

    3/ \9  20/  \15   7
第1层:
  • queue 初始包含根节点 [3]
  • leftToRight = true,从左到右读取当前层:
    • 输出 [3]
  • 下一层加入节点 [9, 20]
  • 切换方向:leftToRight = false
第2层:
  • queue 包含 [9, 20]
  • leftToRight = false,从右到左读取当前层:
    • 输出 [20, 9]
  • 下一层加入节点 [15, 7]
  • 切换方向:leftToRight = true
第3层:
  • queue 包含 [15, 7]
  • leftToRight = true,从左到右读取当前层:
    • 输出 [15, 7]

最终结果为 [[3], [20, 9], [15, 7]]


如果有其他问题或需要进一步优化解释,请随时告诉我!

java 实现

class Solution {public List<List<Integer>> zigzagLevelOrder(TreeNode root) {List<List<Integer>> result = new ArrayList<>();if(root == null) return result;Queue<TreeNode> queue = new LinkedList<>();queue.offer(root);boolean lefttoright = true;while(!queue.isEmpty()) {int levelsize = queue.size();// level 用于存放每层的遍历结果LinkedList<Integer> level = new LinkedList<>();for(int i = 0; i < levelsize; i++) {TreeNode node = queue.poll();if(lefttoright) {level.add(node.val);} else {level.addFirst(node.val);}if(node.left != null) {queue.offer(node.left);}if(node.right != null) {queue.offer(node.right);}}lefttoright = !lefttoright;result.add(level);}return result;}
}
关键字:推广引流渠道方法_ocr是不是用于制作网页的软件_搜索引擎优化解释_长春百度快速优化

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: