题目描述:
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[20,9],
[15,7]
]
题目解析:
经过前两题的磨练,这道题用双向队列是自然而然的事情,我们维护一个bool型变量trans来表示正向和反向,对于不同的方向做不同的处理即可。
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
deque<TreeNode*> q;
bool trans=false;
vector<vector<int>> res={};
if(root==NULL)
return res;
q.push_back(root);
while(!q.empty())
{
int s=q.size();
vector<int> t;
if(trans==true)
{
while(s--)
{
if(q.back()->right!=NULL)
q.push_front(q.back()->right);
if(q.back()->left!=NULL)
q.push_front(q.back()->left);
t.push_back(q.back()->val);
q.pop_back();
}
res.push_back(t);
}
if(trans==false)
{
while(s--)
{
if(q.front()->left!=NULL)
q.push_back(q.front()->left);
if(q.front()->right!=NULL)
q.push_back(q.front()->right);
t.push_back(q.front()->val);
q.pop_front();
}
res.push_back(t);
}
trans=1-trans;
}
return res;
}
};