//BFS
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
if (root == NULL)return{};
queue<TreeNode*>myqueue;
myqueue.push(root);
vector<vector<int>>res;
while (!myqueue.empty())
{
int len = myqueue.size();
vector<int>temp;
for (int i = 0; i < len; i++)
{
TreeNode*cur = myqueue.front();
if (cur->left != NULL)
myqueue.push(cur->left);
if (cur->right != NULL)
myqueue.push(cur->right);
temp.push_back(cur->val);
myqueue.pop();
}
res.push_back(temp);
}
return res;
}
};
用两个队列当然可以,但我的思路是直接用双端队列(我感觉自己的思路特别好):
class Solution {
public:
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
if (root == NULL)return{};
int flag = 0;//0表示从左往右,1表示从右往左
deque<TreeNode*>myqueue;
myqueue.push_back(root);
vector<vector<int>>res;
while (!myqueue.empty())
{
int len = myqueue.size();
vector<int>temp;
if (flag == 0)
{
for (int i = 0; i < len; i++)
{
TreeNode*cur = myqueue.front();
if (cur->left != NULL)
myqueue.push_back(cur->left);
if (cur->right != NULL)
myqueue.push_back(cur->right);
temp.push_back(cur->val);
myqueue.pop_front();
}
flag = 1;
}
else
{
for (int i = 0; i < len; i++)
{
TreeNode*cur = myqueue.back();
if (cur->right != NULL)
myqueue.push_front(cur->right);
if (cur->left != NULL)
myqueue.push_front(cur->left);
temp.push_back(cur->val);
myqueue.pop_back();
}
flag = 0;
}
res.push_back(temp);
}
return res;
}
};