用BFS来从上到下从左到右的记录,一旦到达发现当前行数遍历完了就收手放到vector里
用一个计数器cnt记录下 如果是单数行就用queue记录偶数行就用stack记录
我这个算法有点慢了 因为搞进来搞回去常数有点大 我看也可以直接用vector的reverse或者就开一个双端队列节省空间
class Solution
{
private:
queue<TreeNode*> Q;
queue<int> curQ;
stack<int> S;
int CurrentNode=0,NextNode=0,cnt=1;
vector<vector<int>> Answer;
vector<int> CurrentLine;
public:
vector<vector<int>> levelOrder(TreeNode* root)
{
if (root==NULL) return Answer;
Q.push(root);
CurrentNode=1;
while(!Q.empty())
{
TreeNode* cur=Q.front();
Q.pop();
CurrentNode--;
if (cur->left!=NULL) Q.push(cur->left),NextNode++;
if (cur->right!=NULL) Q.push(cur->right), NextNode++;
if (cnt%2==1) curQ.push(cur->val);
else S.push(cur->val);
if (!CurrentNode)
{
CurrentNode=NextNode;
NextNode=0;
if (cnt%2==1)
while(!curQ.empty()) CurrentLine.push_back(curQ.front()),curQ.pop();
else
while(!S.empty()) CurrentLine.push_back(S.top()),S.pop();
cnt++;
Answer.push_back(CurrentLine);
CurrentLine.clear();
}
}
return Answer;
}
};