vector<vector<int> > zigzagLevelOrder(TreeNode *root) {
vector<TreeNode*> last_level_node;
vector<vector<int>> val_in_level;
if (root == NULL)
{
return val_in_level;
}
last_level_node.push_back(root);
vector<TreeNode*> cur_level_node;
bool zigzag = true;
do
{
cur_level_node.clear();
vector<int> val;
for (int i = 0; i < last_level_node.size(); i++)
{
TreeNode* cur_node = last_level_node[i];
TreeNode* left_node = NULL;
TreeNode* right_node = NULL;
if(cur_node != NULL)
{
left_node = cur_node->left;
right_node = cur_node->right;
if (zigzag)
{
val.push_back(cur_node->val);
}
else
{
val.insert(val.begin(), cur_node->val);
}
if (left_node != NULL)
{
cur_level_node.push_back(left_node);
}
if (right_node != NULL)
{
cur_level_node.push_back(right_node);
}
}
}
val_in_level.push_back(val);
zigzag = !zigzag;
last_level_node = cur_level_node;
}while (!cur_level_node.empty());
return val_in_level;
}
思路和Binary Tree Level Order Traversal类似,只是多加一个标识,保证前一次正向存数值,下一次则反向存数值;前一次反向存数值,下一次则正向存数值