按之字型打印一颗二叉树
问题描述:
将一颗二叉树按照之字型打印,结果存放在二维数组中
分析:
例:
如图二叉树,按照之字型打印的结果就是:6、9、8、3、2。
1.可以看出这是一种类层序遍历的思想;
2.与其说是之字型,我更愿意说是“S”型;
3.假定根是第一层,我们可以发现奇数层的节点是从左到右打印的;而偶数层的节点是从右到左打印的;
思路:
按照层序遍历的思想,不过现在就是把偶数层的顺序逆置一下。
附源码:
/*
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>> ret;
if(pRoot == nullptr){
return ret;
}
queue<TreeNode*> q;
q.push(pRoot);
int lev = 1;
while(!q.empty()){
TreeNode* node = q.front();
int size = q.size();
vector<int> tmp;
while(size--){
q.pop();
tmp.push_back(node->val);
if(node->left)
q.push(node->left);
if(node->right)
q.push(node->right);
node = q.front();
}
if(lev & 1) //如果是奇数层,直接放入结果数组中
ret.push_back(tmp);
else{ //偶数层,先逆置,再放入结果数组中
reverse(tmp.begin(), tmp.end());
ret.push_back(tmp);
}
++lev;
}
return ret;
}
};