0103. 二叉树的锯齿形层次遍历
题目地址(103. 二叉树的锯齿形层次遍历)
https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal/
题目描述
和leetcode 102 基本是一样的,思路是完全一样的。
给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
例如:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回锯齿形层次遍历如下:
[
[3],
[20,9],
[15,7]
]前置知识
队列
公司
阿里
腾讯
百度
字节
思路
这是一个典型的二叉树遍历问题, 关于二叉树遍历,我总结了一个专题,大家可以先去看下那个,然后再来刷这道题。
这道题可以借助队列实现,首先把root入队,然后入队一个特殊元素Null(来表示每层的结束)。
然后就是while(queue.length), 每次处理一个节点,都将其子节点(在这里是left和right)放到队列中。
然后不断的出队, 如果出队的是null,则表式这一层已经结束了,我们就继续push一个null。
关键点解析
队列
队列中用Null(一个特殊元素)来划分每层
树的基本操作- 遍历 - 层次遍历(BFS)
代码
语言支持:JS,C++
JavaScript Code:
C++ Code:
拓展
由于二叉树是递归结构,因此,可以采用递归的方式来处理。在递归时需要保留当前的层次信息(从0开始),作为参数传递给下一次递归调用。
描述
当前层次为偶数时,将当前节点放到当前层的结果数组尾部
当前层次为奇数时,将当前节点放到当前层的结果数组头部
递归对左子树进行之字形遍历,层数参数为当前层数+1
递归对右子树进行之字形遍历,层数参数为当前层数+1
C++实现
相关题目
最后更新于
这有帮助吗?