当前位置: 首页 > wzjs >正文

杭州建平台网站公司网销怎么找客户

杭州建平台网站公司,网销怎么找客户,wordpress特殊图片,坪山附近公司做网站建设哪家技术好Leetcode 103: 二叉树的锯齿形层序遍历 问题描述: 给定一个二叉树,返回其节点值的锯齿形层序遍历(即第一层从左到右,第二层从右到左,第三层从左到右,依此类推)。 适合面试的解法:广…

Leetcode 103: 二叉树的锯齿形层序遍历

问题描述:
给定一个二叉树,返回其节点值的锯齿形层序遍历(即第一层从左到右,第二层从右到左,第三层从左到右,依此类推)。


适合面试的解法:广度优先搜索 + 双端队列

解法特点:

  1. 广度优先搜索(BFS): 通过层序遍历按层处理节点,确保节点遍历的层次性。
  2. 双端队列(Deque): 通过双端队列控制节点值的加入顺序,实现锯齿形效果。
    • 从左到右:直接将节点值加入队列的尾部。
    • 从右到左:将节点值插入队列的头部。
  3. 用 BFS 控制每层的遍历顺序,用双端队列处理结果的锯齿形排序。

适合面试的原因:

  • 时间复杂度 (O(n)),空间复杂度 (O(n)),效率高且易于实现。
  • 展现了灵活的队列操作,是树和 BFS 综合应用的常见场景。

解法思路

核心步骤:
  1. 初始化:

    • 使用队列 Queue<TreeNode> 来管理每层的节点。
    • 定义标志变量 leftToRight 用来判断当前层的遍历方向。
  2. 层序遍历:

    • 遍历每一层节点:
      • 如果 leftToRight = true,将节点值加入到当前层结果的尾部;
      • 如果 leftToRight = false,将节点值插入到当前层结果的头部。
    • 将当前层的结果加入最终结果列表。
  3. 翻转方向:

    • 每处理完一层后,翻转 leftToRight,切换从左到右或从右到左的方向。

代码模板

方法:广度优先搜索 + 双端队列
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<>(); // BFS 队列queue.offer(root);boolean leftToRight = true; // 初始遍历方向是从左到右while (!queue.isEmpty()) {int levelSize = queue.size();Deque<Integer> levelList = new LinkedList<>(); // 双端队列存储当前层的节点值// 遍历当前层所有节点for (int i = 0; i < levelSize; i++) {TreeNode currentNode = queue.poll();if (leftToRight) {levelList.addLast(currentNode.val); // 从左到右:添加到尾部} else {levelList.addFirst(currentNode.val); // 从右到左:添加到头部}// 加入下一层的节点if (currentNode.left != null) queue.offer(currentNode.left);if (currentNode.right != null) queue.offer(currentNode.right);}// 将当前层的结果加入最终结果result.add(new ArrayList<>(levelList));// 翻转方向leftToRight = !leftToRight;}return result;}
}

代码详细注释

class Solution {public List<List<Integer>> zigzagLevelOrder(TreeNode root) {// 定义最终结果列表List<List<Integer>> result = new ArrayList<>();// 特殊边界条件:如果树为空,直接返回if (root == null) return result;// 初始化 BFS 队列和方向标记Queue<TreeNode> queue = new LinkedList<>();queue.offer(root); // 将根节点加入 BFS 队列boolean leftToRight = true; // 起始从左到右遍历// BFS 遍历二叉树的每一层while (!queue.isEmpty()) {int levelSize = queue.size(); // 当前层的节点数Deque<Integer> levelList = new LinkedList<>(); // 使用双端队列保存当前层结果for (int i = 0; i < levelSize; i++) {TreeNode currentNode = queue.poll(); // 从队列中取出当前节点// 根据遍历方向将节点值添加到双端队列if (leftToRight) {levelList.addLast(currentNode.val); // 从左到右时,添加到队尾} else {levelList.addFirst(currentNode.val); // 从右到左时,添加到队头}// 将当前节点的左右孩子加入队列if (currentNode.left != null) {queue.offer(currentNode.left);}if (currentNode.right != null) {queue.offer(currentNode.right);}}// 将双端队列的结果转换为列表,加入最终结果result.add(new ArrayList<>(levelList));// 翻转方向leftToRight = !leftToRight;}return result; // 返回最终结果}
}

复杂度分析

时间复杂度:
  • 每个节点仅被访问一次,时间复杂度为 (O(n)),其中 (n) 是树中节点总数。
空间复杂度:
  • BFS 队列最多存储一层的节点,最坏情况是 (O(n))。
  • 使用双端队列临时存储每层结果,复杂度为 (O(w)),其中 (w) 是二叉树的最大宽度。
    综合空间复杂度为 (O(n))。

测试用例

示例 1:
输入:3/ \9  20/  \15   7输出:
[[3],[20,9],[15,7]
]

示例 2:
输入:1/ \2   3/ \
4   5输出:
[[1],[3,2],[4,5]
]

示例 3:
输入: null
输出: []

如何快速 AC(面试技巧)

1. 清晰解释 BFS 对二叉树的层序遍历

  • BFS 利用队列按层层处理节点,巧妙地分离层次关系。
  • 在片段中添加「左右翻转」是实现锯齿形遍历的核心技巧。

2. 灵活使用双端队列

  • 明确说明为什么使用双端队列:
    • 从左到右时添加到队尾;
    • 从右到左时插入到队头。

3. 时间和空间复杂度分析

  • 说明 BFS 遍历节点的线性开销 (O(n)),无多余操作,非常高效。

4. 特殊情况处理

  • 空树(根节点为 null)时,应返回空结果。

总结

适合面试的解法:广度优先搜索 + 双端队列

  • 女人拆分思路:利用 BFS 分层处理节点,用双端队列处理锯齿效果。
  • 时间复杂度 (O(n))、空间复杂度 (O(n)),是最优解决方案。

如何快速 AC:

  1. 清晰实现 BFS,按层处理树节点
  2. 双端队列解决锯齿效果,结合方向标记灵活转换;
  3. 完整测试,涵盖空树和各种复杂结构树。

这种高效解法逻辑清晰,非常适合面试场景!


文章转载自:

http://y1neU0pd.dndjx.cn
http://MeNdbBSk.dndjx.cn
http://UMXF6t5D.dndjx.cn
http://CP60jZwx.dndjx.cn
http://rvX0HMtc.dndjx.cn
http://WER4LTt5.dndjx.cn
http://8Jvwwys0.dndjx.cn
http://9i71DYsX.dndjx.cn
http://D0KyERlh.dndjx.cn
http://ux5OoPFj.dndjx.cn
http://yUUkcAor.dndjx.cn
http://7nw24bSy.dndjx.cn
http://Rs2rA4Uu.dndjx.cn
http://DDWvXRvX.dndjx.cn
http://RTUSInqD.dndjx.cn
http://B8nd4XyA.dndjx.cn
http://Ck7aIQRa.dndjx.cn
http://ch0oUrv3.dndjx.cn
http://4gpjGoKu.dndjx.cn
http://RpBhmd1U.dndjx.cn
http://UlZBYo2y.dndjx.cn
http://2cWTMaOb.dndjx.cn
http://v7RUEadn.dndjx.cn
http://F34cRI73.dndjx.cn
http://Q4Wn3n7c.dndjx.cn
http://kG7ybWvm.dndjx.cn
http://HKPlXGvc.dndjx.cn
http://Cadx1Qi3.dndjx.cn
http://9i1GcUie.dndjx.cn
http://uUDn66G0.dndjx.cn
http://www.dtcms.com/wzjs/626465.html

相关文章:

  • 做设计比较好的网站如何破解网站后台密码
  • 国外网站空间租用费用wordpress文章末尾加上相关文章
  • 哪些公司的网站做的漂亮开公司如何做网站推广页面
  • 十堰网站建设_网站制作_软件开发_网店培训 优易开发工具包
  • 旅游网站 功能网站建设渠道
  • 青岛建站价格物联网有哪些工作岗位
  • 免费的奖励网站有哪些商城网站建设论坛
  • 在线一键免费生成网页网站免费观看电视剧软件
  • 厦门住房建设局网站html 做网站的模板
  • 设计互动网站建设头条权重查询站长工具
  • 阿里云域名出售网络推广优化招聘
  • 杭州开发区网站建设西安优化外
  • 网站建设公司排名前十购物网站开发报告
  • 帝国网站地图插件建设工程合同补充协议范本
  • 青岛app网站开发更改wordpress标签分割符合
  • 做网站用什么软件编辑做淘宝客最好的网站是什么网站
  • 温州知名网站推广奉贤做网站公司
  • 做网站为职业生存不下去阿里云服务器添加网站
  • 无版权图片网站宝山手机网站制作公司
  • 网站本身对网站打开速度有何影响论基层门户网站的建设
  • 网站建设维护外包重庆景点排名前十
  • 个人网站制作品牌网站建设怎么收费
  • 开发网站比较好的公司shopify seo
  • 企业官方网站开发外包自己做外贸怎么找客户
  • 嵩明县住房和城乡建设局网站外贸接单网站
  • 网站建设全程揭秘 光盘文件兰州网络推广技术
  • 优质的常州网站建设西宁的网站设计
  • 贵阳中企动力做的网站免费网站站长查询
  • 怎么做多语言网站尚品宅配装修公司官网
  • 怎样为网站做推广wordpress 照片墙