题解 | #按之字形顺序打印二叉树#
按之字形顺序打印二叉树
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; } };
牛客刷题记录 文章被收录于专栏
记录自己的刷题记录,刷过的题的解法