题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
/*
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;
if(pRoot==nullptr) return res;
queue<TreeNode*>deq;
deq.push(pRoot);
bool isOdd=true;
while(!deq.empty())
{
vector<int>row;
int size=deq.size();
for(int i=0;i<size;++i)
{
TreeNode *front=deq.front();
row.push_back(front->val);
deq.pop();
if(front->left!=nullptr)
deq.push(front->left);
if(front->right!=nullptr)
deq.push(front->right);
}
if(!isOdd) reverse(row.begin(),row.end());//偶数行反转容器
res.push_back(row);
isOdd=!isOdd;
}
return res;
}
};
类似题目:
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
分析:虽然是层次遍历,但是要求分别将每行放到一个容器中,因此可以采用上面类的方法。
/*
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;
if(pRoot==nullptr) return res;
queue<TreeNode*>q;
q.push(pRoot);
while(!q.empty())
{
vector<int>temp;
int size=q.size();
for(int i=0;i<size;++i)
{
TreeNode *front=q.front();
temp.push_back(front->val);
q.pop();
if(front->left!=nullptr)
q.push(front->left);
if(front->right!=nullptr)
q.push(front->right);
}
res.push_back(temp);
}
return res;
}
};