二叉树的遍历分为深度优先遍历和广度优先遍历,深度优先要求先进后出,因此使用栈,广度优先搜索要求先进后出,因此使用队列。
深度优先遍历分为前后中序遍历。
三种顺序都有递归和迭代两种方法。迭代就是用栈模拟递归。
遍历顺序 | |
---|---|
前序 | 中左右 |
中序 | 左中右 |
后序 | 左右中 |
层序 | 从左到右 |
1 层序模板
struct TreeNode{
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x):val(x),left(NULL),right(NULL){
}
};
vector<vector<int>> leverorder(TreeNode* root){
queue<TreeNode*> que;
if(root!=NULL) que.push(root);
vector<vector<int>> res;
while(!que.empty()){
int size=que.size();//记录此时大小 随时在变化
vector<int> tmp;
for(int i=0;i<size;i++){
TreeNode* cur=que.front();
que.pop();
tmp.push_back(cur-