/*我的解题思路是
设置一个整型变量lr,奇数时从左往右入队,偶数时从右往左入队,
先将树的根节点入队,
然后当队列不为空时出队,并将其打印(这里是将其保存到数组中),然后每出队一个就将其入栈,直到队列为空时退出,将lr加一,当栈不为空时出栈,判断lr是奇数还是偶数,如果是奇数,先当元素的右孩子不为空入队,再当元素的左孩子不为空入队,如果为空执行下一步;偶数时则相反。
最后当队列为空时,退出循环,返回结果。*/
class
Solution {
public
:
vector<vector<
int
> > Print(TreeNode* pRoot) {
queue<TreeNode*> printque;
//打印队列
stack<TreeNode*> reversestk;
//反转栈
vector<vector<
int
> > res;
if
(pRoot == NULL)
return
res;
int
lr = 0;
//区别左右,偶数从左往右打印,奇数从右往左打印
printque.push(pRoot);
while
(!printque.empty()){
vector<
int
> row;
while
(!printque.empty()){
TreeNode *queFront = printque.front();
printque.pop();
row.push_back(queFront->val);
reversestk.push(queFront);
}
res.push_back(row);
lr++;
while
(!reversestk.empty()){
TreeNode *stktop = reversestk.top();
reversestk.pop();
if
(0 == lr % 2){
if
(stktop->left != NULL)printque.push(stktop->left);
if
(stktop->right != NULL)printque.push(stktop->right);
}
else
{
if
(stktop->right != NULL)printque.push(stktop->right);
if
(stktop->left != NULL)printque.push(stktop->left);
}
}
}
return
res;
}
};