用一个栈来使数据反向。
时间复杂度:O(N)
C++代码:
class Solution {
public:
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
if (root == nullptr)
return {};
int dir = 1;
vector<vector<int>> result(1);
queue<TreeNode*> record;
stack<TreeNode*> reverse;
record.push(root);
while (!record.empty())
{
TreeNode* temp = record.front();
record.pop();
(*(result.end() - 1)).push_back(temp->val);
if (dir)
{
if (temp->left != nullptr)
reverse.push(temp->left);
if (temp->right != nullptr)
reverse.push(temp->right);
}
else
{
if (temp->right != nullptr)
reverse.push(temp->right);
if (temp->left != nullptr)
reverse.push(temp->left);
}
if (record.empty())
{
dir = !dir;
if (!reverse.empty())
result.push_back({});
while (!reverse.empty())
{
TreeNode* now = reverse.top();
reverse.pop();
record.push(now);
}
}
}
return result;
}
};