二叉树的四种遍历方式
前言
最近做题用到很多次二叉树的遍历,因此写这篇文章记录二叉树的四种遍历方式。
- 层次遍历:按照每一层的顺序进行遍历
- 前序遍历:根结点 —> 左子树 —> 右子树
- 中序遍历:左子树—> 根结点 —> 右子树
- 后序遍历:左子树 —> 右子树 —> 根结点
首先为了方便,先假设二叉树的结构如下:
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {
}
};
对于程序的输入为:
3 //根节点root
/ \
9 20
/ \ / \
4 10 15 7
1.二叉树的层次遍历
层次遍历就是依次遍历树的每一层。借助队列,可以轻松实现。
void levelOrder(TreeNode *root){
queue<TreeNode *> q[2];//定义两个队列,轮流使用
TreeNode *p;
int cnt = 0,curUsed = 0;//当前使用的队列下标
if(root)//如果为NULL
q[0].push(root);
while(!q[curUsed].empty()){
cout<<"第"<<cnt+1<<"层:";
while(!q[curUsed].empty(</