今天的收获:
1.c++中存在queue模板
queue<template type> vec;
vec.push();
vec.pop();
queue 没有清空操作,clear()等函数,因此可以定义一个新的空队列 queue< ** > newqu,然后 swap(vec,newqu ),这样就清空vec 了。
2.借助queue的层次遍历
思想:在遍历该节点时,将它的孩子几点入队。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> LevelTravel(TreeNode* root){
vector<vector<int>> result;
queue<TreeNode*> vec,tmp;
vector<int> temp;
if(root == NULL)
return result;
vec.push(root);
while(!vec.empty()){
while(!vec.empty()){
TreeNode * cur = vec.front();
vec.pop();
if( cur->left!= NULL) {
tmp.push(cur->left);
}
if( cur->right!= NULL) {
tmp.push(cur->right);
}
temp.push_back(cur->val);
}
swap(vec,tmp);
result.push_back(temp);
temp.clear();
}
for(int i =1;i<result.size();i =i+2)
reverse(result[i].begin(),result[i].end());
return result;
}
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
vector<vector<int>> result;
result = LevelTravel(root);
return result;
}
};