二叉树的前序、中序、后序、层序遍历
在写遍历函数前,我们需要知道这几种遍历方法的访问结点的顺序。
- 前序遍历:
1.先访问根节点。
2.再访问左子树。
3.最后访问右子树。 - 中序遍历:
1.先访问左子树。
2.在访问根结点。
3.最后访问右子树。 - 后序遍历:
1.先访问左子树。
2.在访问右子树。
3.最后访问根结点。 - 层序遍历:
按照二叉树的层次遍历,每层依次从左至右。
对于前序、中序、后序遍历函数,我们可以这样写:
int PreOrder(Node *root){//前序遍历函数
if(root==nullptr){
return 0;
}else{
cout<<root->data; //输出当前结点的数值 I式
PreOrder(root->lchild); //访问当前结点的左子树 II式
PreOrder(root->rchild); //访问当问结点的右子树 III式
}
}
而对于中序、后序遍历函数无非是改变一下I式、II式、III式的顺序,这里就不再赘述。
重点来了!!!
层序遍历函数,需要用到队列的知识,因为在对二叉树层序遍历时就非常满足队列的性质。
//层序遍历
void Tree::LeverOrder() {
Node *Queue[20]; //定义一个数组指针,用来存储入队的结点指针
Node* q = nullptr; //定义一个临时指针
int front = -1, rear = -1; //front、rear是指示器,用来指示Queue的下标
if (root == nullptr) {
return ;
}
Queue[++rear] = root;
while (front != rear) {
q = Queue[++front];
cout << q->data;
//如果根节点的左、右子树非空就入队
if (q->lchild != nullptr) {
Queue[++rear] = q->lchild;
}
if (q->rchild != nullptr) {
Queue[++rear] = q->rchild;
}
}
}
本文作者:小白不败
本文链接:https://www.cnblogs.com/zhzbubai/p/17827662.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步