Binary Tree Zigzag Level Order Traversal
Binary Tree Zigzag Level Order Traversal
Description:
Given a binary tree, return the zigzag level order traversal of its nodes’ values. (ie, from left to right, then right to left for the next level and alternate between).
Example
Given binary tree {3,9,20,#,#,15,7},
3
/
9 20
/
15 7return its bottom-up level order traversal as:
[
[3],
[20,9],
[15,7]
]
分析:
简单题,和普通的BFS没有多大区别。
思路:
当访问节点后,如果左(右)孩子不为
nullptr就把左(右)孩子加入queue中(先左后右)。当访问节点时,需要分情况讨论此节点所在的层是从左遍历还是从右边遍历,所以需要一个变量
level记录当前的层数,以及一个变量node_num来记录当前层的节点数。- 如果从左遍历,则把节点的值通过
push_back()添加到临时vector(下方代码里是变量tem)的后端。 - 如果从右遍历,则把节点的值通过
insert()插入到临时vector(下方代码里是变量tem)的首部。
- 如果从左遍历,则把节点的值通过
注意:最后一层遍历得到的临时vector(下方代码里是变量tem)是没有添加到rs中的,因为此时queue(下方代码里是变量q)为空,最后一个else语句没有执行,所以需要在while循环后添加语句if (tem.size() > 0) rs.push_back(tem);。
Code:
1 | /** |