class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
vector<vector<int> > result;
if (pRoot == NULL)
return result;
queue<TreeNode*> q;
q.push(pRoot);
int flag = -1;// flag=1表示从左向右,flag=1表示从右向左
while (!q.empty())
{
//把q中的元素都pop出来
vector<int> res;
vector<TreeNode*> cur;
while (!q.empty())
{
res.push_back(q.front()->val);
cur.push_back(q.front());
q.pop();
}
result.push_back(res);
for (int i = cur.size() - 1; i >= 0; i--)
{
TreeNode* curNode = cur[i];
if (flag == 1)
{
if(curNode->left)
q.push(curNode->left);
if(curNode->right)
q.push(curNode->right);
}
else //flag==1
{
if (curNode->right)
q.push(curNode->right);
if (curNode->left)
q.push(curNode->left);
}
}
flag = -flag;
}
return result;
}
};
用一个队列和一个数组
队列:flag==1,先将左孩子push进去,再将右孩子push进去
数组:每次都是从 尾向前 遍历数组