103. Binary Tree Zigzag Level Order Traversal
初始化一个队列,将根节点加入队列。 记录当前层的节点数量和下一层的节点数量。 使用一个方向变量来控制当前层的遍历方向(左到右或右到左)。 在每次循环中,处理当前层的所有节点: 交换方向,继续处理下一层节点。
发布日期:2025-06-19 21:18:22
浏览次数:7
分类:精选文章
本文共 1382 字,大约阅读时间需要 4 分钟。
为了解决这个问题,我们需要实现二叉树的之字型层次遍历。这种遍历方式是在每一层中,节点的访问顺序会交替变化,即从左到右,然后右到左,再从左到右,依此类推。
方法思路
我们可以使用广度优先搜索(BFS)来遍历二叉树,并在每一层中根据指定的方向收集节点值。具体步骤如下:
- 取出当前层的所有节点,收集它们的值。
- 根据方向决定是否反转当前层的值顺序。
- 将当前层的值添加到结果列表中。
- 处理当前节点的左子和右子节点,将它们加入队列。
这种方法确保我们能够按层次和指定的方向收集节点值,得到正确的结果。
解决代码
import collectionsclass TreeNode: def __init__(self, val): self.val = val self.left = None self.right = Nonedef zigzagLevelOrder(root): result = [] if not root: return result queue = collections.deque([root]) direction = True # True表示左到右,False表示右到左 while queue: currentLevelSize = len(queue) currentLevel = [] for _ in range(currentLevelSize): node = queue.popleft() currentLevel.append(node.val) if node.left: queue.append(node.left) if node.right: queue.append(node.right) if not direction: currentLevel = currentLevel[::-1] result.append(currentLevel) direction = not direction return result
代码解释
- TreeNode类:定义了二叉树的节点结构,每个节点包含值、左子节点和右子节点。
- zigzagLevelOrder函数:实现了之字型层次遍历。
- 初始化队列,并将根节点加入队列。
- 使用方向变量控制遍历方向。
- 在每次循环中,处理当前层的所有节点,收集它们的值,并根据方向反转顺序。
- 将处理后的节点值添加到结果列表中。
- 处理左子和右子节点,更新队列。
- 交换方向,继续处理下一层节点。
这种方法确保了我们能够高效地完成二叉树的之字型层次遍历,时间复杂度为O(n),空间复杂度为O(n),其中n是二叉树的节点数。
发表评论
最新留言
关注你微信了!
[***.104.42.241]2026年06月08日 20时51分33秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PHP 统计数据功能 有感
2023-02-28
SpringBoot处理JSON数据
2023-02-28
PHP 输入输出流合集
2023-02-28
php--防止sql注入的方法
2023-02-28
php-兔子问题,斐波那契数列
2023-02-28
php-有序数组合并后仍有序
2023-02-28
php-约瑟夫问题
2023-02-28
php.ini中常见的配置信息选项
2023-02-28
php.ini配置中有10处设置不当,会使网站存在安全问题
2023-02-28
PHP7 新特性
2023-02-28
PHP7+MySQL5.7+Nginx1.9. on Ubuntu 14.0
2023-02-28
php7.1.6 + redis
2023-02-28
php7中使用php_memcache扩展
2023-02-28
PHP7中十个需要避免的坑
2023-02-28
php7和PHP5对比的新特性和性能优化
2023-02-28
PHP7安装pdo_mysql扩展
2023-02-28
PHP7实战开发简单CMS内容管理系统(7) 后台登录架构 用户登录校验
2023-02-28
php7,从phpExcel升级到PhpSpreadsheet
2023-02-28
PHP8中match新语句的操作方法
2023-02-28