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 | /** |