/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
* 因为想一步一步的写,所以采用辅助栈还有队列的方法,进行求解,具体见演草纸
* 方法差不多是bfs的思想,只是用栈转了一下
*/
class Solution {
public:
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
vector<vector<int>> ans;
if (root == NULL)
return ans;
stack<TreeNode*> nodeStack;
queue<TreeNode*> nodeQueue;
int cnt=0, i,j;
TreeNode* current;
nodeQueue.push(root);
while(nodeQueue.size())
{
++cnt; // 代表是奇数行还是偶数行;
vector<int> tmp;
while (nodeQueue.size())
{
current = nodeQueue.front();
nodeQueue.pop();
nodeStack.push(current);
tmp.push_back(current->val);
}
ans.push_back(tmp);
if (cnt%2)//如果是奇数行
{
while (nodeStack.size())
{
current = nodeStack.top();
nodeStack.pop();
if (current->right)
nodeQueue.push(current->right);
if (current->left)
nodeQueue.push(current->left);
}
}
else//偶数行
{
while (nodeStack.size())
{
current = nodeStack.top();
nodeStack.pop();
if (current->left)
nodeQueue.push(current->left);
if (current->right)
nodeQueue.push(current->right);
}
}
}
return ans;
}
};
层次遍历变种103. Binary Tree Zigzag Level Order Traversal
最新推荐文章于 2021-01-29 17:05:43 发布