题目描述:请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
完整代码:
/*
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> > array;
//声明一个变量,表示一维数组
stack<TreeNode*>stack1,stack2;
//检查输入的合法性
if(pRoot == nullptr)
return array;
//将树根压在 0 栈内
stack1.push(pRoot);
//如果当前在 0 号栈
while(!stack1.empty() || !stack2.empty())
{
vector<int> data;
if(!stack1.empty())
{
while(!stack1.empty())
{
//取当前层栈定元素
TreeNode* pNode1 = stack1.top();
stack1.pop();
data.push_back(pNode1->val);
//从左到右顺序打印
if(pNode1->left != nullptr)
stack2.push(pNode1->left);
if(pNode1->right != nullptr)
stack2.push(pNode1->right);
}
array.push_back(data);
}
else if(!stack2.empty())//如果当前在 1 号栈
{
while(!stack2.empty())
{
//取当前层栈定元素
TreeNode* pNode2 = stack2.top();
stack2.pop();
data.push_back(pNode2->val);
//从右到左顺序打印
if(pNode2->right != nullptr)
stack1.push(pNode2->right);
if(pNode2->left != nullptr)
stack1.push(pNode2->left);
}
array.push_back(data);
}
}
//返回最终的结果
return array;
}
};