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).
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] ]
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int> > zigzagLevelOrder(TreeNode *root) {
vector<vector<int> > res;
if (root == NULL) {
return res;
}
vector<int> r;
r.push_back(root->val);
res.push_back(r);
int count = 1;
int order = 0;
vector<TreeNode *> path;
path.push_back(root);
while (!path.empty()) {
auto t = path.front();
if (t->left) {
path.push_back(t->left);
}
if (t->right) {
path.push_back(t->right);
}
path.erase(path.begin());
count --;
if (count == 0) {
vector<int> tmp;
if (!order) {
for (vector<TreeNode *>::iterator iter = path.end()-1; iter >= path.begin(); iter--) {
tmp.push_back((*iter)->val);
}
} else {
for (vector<TreeNode *>::iterator iter = path.begin(); iter != path.end(); iter++) {
tmp.push_back((*iter)->val);
}
}
order = !order;
if (tmp.size()>0) {
res.push_back(tmp);
}
count = path.size();
}
}
return res;
}
};
本文介绍了如何使用zigzagLevelOrder方法遍历二叉树节点的值,并通过实例展示了实现过程。重点突出了zigzagLevelOrder的特性及应用。
282

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



