- 前,中,后序遍历
这种写法是相反的,比如说前序,在代码里相应部分的顺序是右中左
前中后都可以用这个模板,改变一下顺序就可以了
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root)
{
vector<int> res;
stack<TreeNode*> s;
if(root!=nullptr)
s.push(root);
while(!s.empty())
{
TreeNode *front = s.top();
s.pop();
if(front!=NULL)
{
if(front->right != NULL)
s.push(front->right);
if(front->left != NULL)
s.push(front->left);
s.push(front);
s.push(nullptr);
}
else
{
res.push_back(s.top()->val);
s.pop();
}
}
return res;
}
};
动画演示和详细说明
- 层序遍历
使用队列完成层序遍历,第一层先进队列,出来的时候将左右子树放入队列,然后左子
树出来的时候再将它的左右子树放入队列,此时右子树出队列,同时将它的左右子树放入队列
以下为按行输出的程序
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root)
{
vector<vector<int> > ret;
vector<int> ans;
queue<TreeNode *> p;
if(root != NULL)
p.push(root);
else
return ret;
while(!p.empty())
{
int len = p.size();
vector<int> ans;
while(len--)
{
TreeNode *front = p.front();
ans.push_back(front->val);
p.pop();
if(front->left != NULL)
p.push(front->left);
if(front->right != NULL)
p.push(front->right);
}
ret.push_back(ans);
}
return ret;
}
};