题解 | #按之字形顺序打印二叉树#
按之字形顺序打印二叉树
http://www.nowcoder.com/practice/91b69814117f4e8097390d107d2efbe0
思路:
层序遍历,奇数层从左到右,偶数层从右到左打印
首先层序遍历,使用队列,每一层的结果存在qvec中,此时的qvec中每一层都是从左到右的,设定一个标志flag,表示层数,当flag是奇数时,直接将qvec给res;当flag为偶数时,将qvec的内容反转再给res。
注:由于我太菜,在反转的时候又加了一个栈进行反转,代码见50行注释掉的原始部分。实际上一个reverse函数就可以搞定。
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
vector<vector<int>> res;
queue<TreeNode*> Queue;
Queue.push(pRoot);
int flag = 0;
if(!pRoot) return res;
while(Queue.size() > 0)
{
vector<int> qvec;
int size = Queue.size();
while(size > 0)//层次遍历,qvec记录每层内容
{
TreeNode* node = Queue.front();
Queue.pop();
qvec.push_back(node->val);
size--;
if(node->left)
{
Queue.push(node->left);
}
if(node->right)
{
Queue.push(node->right);
}
}
flag += 1;
if(flag%2 && qvec.size()>0)//flag是奇数
{
res.push_back(qvec);
}
if(!(flag%2) && qvec.size()>0)//flag是偶数
{
//优化
reverse(qvec.begin(), qvec.end());
res.push_back(qvec);
//原始
/*stack<int> Stack;
for(int i=0;i<qvec.size();++i)
{
Stack.push(qvec[i]);
}
qvec.clear();
while(Stack.size()>0)
{
int tmp = Stack.top();
qvec.push_back(tmp);
Stack.pop();
}
res.push_back(qvec);*/
}
}
return res;
}
};牛客刷题记录 文章被收录于专栏
记录自己的刷题记录,刷过的题的解法
