给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
例如:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回锯齿形层次遍历如下:
[
[3],
[20,9],
[15,7]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解:bfs层次遍历即可,只需要加一个标记,判断从左到右还是从右到左
class Solution {
public:
vector<vector<int>> vect;
void bfs(TreeNode* rt){
queue<TreeNode*>qq;
qq.push(rt);
bool flag=true;
while(!qq.empty()){
int len=qq.size();
vector<int>cut;
stack<int>ss;
while(len--){
TreeNode* t=qq.front();
qq.pop();
if(flag) cut.push_back(t->val);
else ss.push(t->val);
if(t->left) qq.push(t->left);
if(t->right) qq.push(t->right);
}
if(!flag)
while(!ss.empty()){
cut.push_back(ss.top());
ss.pop();
}
vect.push_back(cut);
flag=!flag;
}
}
vector<vector<int>> zigzagLevelOrder(TreeNode* rt) {
if(rt==NULL) return vect;
bfs(rt);
return vect;
}
};