题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推
思路
一个从左到右打印,一个从右到左打印,故而需要两个栈来完成,具体见代码。
code
/*
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> > printNodes;
if(pRoot==NULL)
return printNodes;
stack<TreeNode*> Nodestack[2];
int line=0;
Nodestack[line].push(pRoot);
vector<int> nodelist;
while(!Nodestack[0].empty()||!Nodestack[1].empty())
{
if(line==0)
{
if(!Nodestack[0].empty())
{
TreeNode* node=Nodestack[0].top();
nodelist.push_back(node->val);
Nodestack[0].pop();
if(node->left)
Nodestack[1].push(node->left);
if(node->right)
Nodestack[1].push(node->right);
}
}else{
if(!Nodestack[1].empty())
{
TreeNode* node=Nodestack[1].top();
nodelist.push_back(node->val);
Nodestack[1].pop();
if(node->right)
Nodestack[0].push(node->right);
if(node->left)
Nodestack[0].push(node->left);
}
}
if((Nodestack[0].empty()&&line==0)||(Nodestack[1].empty()&&line==1))
{
line=1-line;
printNodes.push_back(nodelist);
nodelist.clear();
}
}
return printNodes;
}
};