按之字形,类似于前面一个打印二叉树的程序,那个题用两个队列,这个题用两个栈,代码用的寒假写的代码,没重新写,因为差不多。
/*
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> > node;
if(pRoot == NULL)
return node;
vector<int> res;
stack<TreeNode *> s[2];
int mark = 0;
s[mark].push(pRoot);
while(!s[mark].empty())
{
TreeNode * temp = s[mark].top();
s[mark].pop();
res.push_back(temp -> val);
if(mark == 1)
{
if(temp -> right != NULL)
s[1 - mark].push(temp -> right);
if(temp -> left != NULL)
s[1 - mark].push(temp -> left);
}
else
{
if(temp -> left != NULL)
s[1 - mark].push(temp -> left);
if(temp -> right != NULL)
s[1 - mark].push(temp -> right);
}
if(s[mark].empty())
{
mark = 1 - mark;
node.push_back(res);
res.clear();
}
}
return node;
}
};