使用队列进行层次遍历,使用栈保存层次遍历的结点,isleft记录是否从左往右。
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
vector<vector<int> > result;
queue<TreeNode* > q;
if(pRoot) q.push(pRoot);
bool isleft=true;
while(!q.empty())
{
vector<int> v;
stack<TreeNode *> s;
while(!q.empty())
{
TreeNode *p=q.front();
q.pop();
v.push_back(p->val);
s.push(p);
}
while(!s.empty())
{
TreeNode *p=s.top();
s.pop();
if(isleft)
{
if(p->right)
q.push(p->right);
if(p->left)
q.push(p->left);
}else
{
if(p->left)
q.push(p->left);
if(p->right)
q.push(p->right);
}
}
isleft=(isleft==true)?false:true;
result.push_back(v);
}
return result;
}
};
京公网安备 11010502036488号