题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
题解:
1,奇数行从左到右,偶数行从右到左
2,打印顺序为A CB DEFG KJIH LM
3,定义一个栈,保存当前层结点
4,定义一个队列,对于栈顶指针,奇数行保存左右子结点,偶数行保存右左子结点
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
stack<TreeNode*> S;
queue<TreeNode*> Q;
S.push(pRoot);
TreeNode* tmp;
vector<vector<int> > array;//所有层结点值顺序
vector<int> line_val;//每层结点值顺序
int line = 1;//标记奇偶层
if (pRoot==NULL)
return array;
while (!S.empty())
{
line_val.clear();
while (!S.empty())
{
tmp = S.top();
S.pop();
line_val.push_back(tmp->val);
if (line % 2 != 0)
{
if (tmp->left)
Q.push(tmp->left);
if (tmp->right)
Q.push(tmp->right);
}
else
{
if (tmp->right)
Q.push(tmp->right);
if (tmp->left)
Q.push(tmp->left);
}
}
while (!Q.empty())
{
S.push(Q.front());
Q.pop();
}
line += 1;
array.push_back(line_val);
}
return array;
}
};