/**********************************************************************************************************
Given a binary tree, return the zigzag level order traversal of its nodes’ values. (ie, from le to right,
then right to le for the next level and alternate between).
For example: Given binary tree 3,9,20,#,#,15,7,
3
/ \
9 20
/ \
15 7
return its zigzag level order traversal as:
[
[3],
[20,9],
[15,7]
]
**********************************************************************************************************/
Class Solution{
public:
vector<vector<int> > levelOrder(TreeNode * root){
vector<vector<int>> reulst;
if(root == nullptr) return result;
queue<TreeNode*> q;
bool left_to_right = true;
vector<int> level;
q.push(root);
q.push(nullptr);//用来分割层
while(!q.empty()){
TreeNode * cur = q.front();
q.pop();
if(cur){
level.push_back(cur->val);
if(node->left) q.push(cur->left);
if(node->right) q.push(cur->right);
}else{
if(left_to_right){
result.push_back(level);
}else{
reverse(level.begin(),level,end());
result.push_back(level);
}
level.clear();
left_to_right = !left_to_right;
if(q.size() > 0) q.push(nullptr);
}
}
return result;
}
};

使用队列完成对二叉树的遍历,每层的结束使用nullptr作为分割符
参考资料:
LeetCode题解
本文介绍了一种解决二叉树之字形层序遍历问题的算法,通过使用队列和标志位实现从左到右再从右到左的交替遍历,最终返回各层节点值的列表。

被折叠的 条评论
为什么被折叠?



