给出一棵二叉树,返回其节点值的锯齿形层次遍历(先从左往右,下一层再从右往左,层与层之间交替进行)
给出一棵二叉树 {3,9,20,#,#,15,7}
,
3 / \ 9 20 / \ 15 7
返回其锯齿形的层次遍历为:
[
[3],
[20,9],
[15,7]
]
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
/**
* @param root: The root of binary tree.
* @return: A list of lists of integer include
* the zigzag level order traversal of its nodes' values
*/
public:
vector<vector<int>> zigzagLevelOrder(TreeNode *root) {
// write your code here
vector<vector<int>>res;
if(root==NULL) return res;
queue<TreeNode*>q;
q.push(root);
int line=0;
while(!q.empty()){
int size=q.size();
vector<int>oneLevel;
for(int i=0;i<size;i++){
TreeNode*tmp=q.front();q.pop();
oneLevel.push_back(tmp->val);
if(tmp->left) q.push(tmp->left);
if(tmp->right) q.push(tmp->right);
}
if(line%2==0) res.push_back(oneLevel);
else{
reverse(oneLevel.begin(),oneLevel.end());
res.push_back(oneLevel);
}
line++;
}
return res;
}
};