栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言二叉树前序、中序、后序、层序遍历

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言二叉树前序、中序、后序、层序遍历

知识点整理:

1、前序遍历:根-左-右

2、中序遍历:左-根-右

3、后序遍历:左-右-根

4、层序遍历:从树根出发一层一层从左往右遍历

代码展示:

#include
#include
#include
typedef struct node{
    char data;
    struct node *left,*right;
}Node;
 Node *insert_node(Node *root,char c){
     if(root==NULL){
         Node *p=(Node *)malloc(sizeof(Node));
         p->data=c;
         p->left=p->right=NULL;
         return p;
     }
     int x=rand()%2;
     if(x==0){//往左子树插入
         root->left=insert_node(root->left,c);
     }
     else root->right=insert_node(root->right,c);
     return root;
 }
 void perorder(Node *root){//前序遍历
     if(root==NULL)//当前结点为空
       return ;
     printf("%c",root->data);//自身
     perorder(root->left);//左子树
     perorder(root->right);//右子树
 }
 void inorder(Node *root){//中序遍历
     if(root==NULL)//当前结点为空
       return ;
     inorder(root->left);//左子树
     printf("%c",root->data);//自身
     inorder(root->right);//右子树
 }
 void postorder(Node *root){//后序遍历
     if(root==NULL)//当前结点为空
       return ;    
     postorder(root->left);//左子树
     postorder(root->right);//右子树
     printf("%c",root->data);//自身
 }
 void levelorder(Node *root){//层序遍历
     Node *num[30];//队列
     int front=0,rear=1;//num[front]、num[rear]首、尾指针
     num[0]=root;
     while(front!=rear){
         Node *p=num[front];
         front++;
         printf("%c",p->data);
         if(p->left!=NULL) num[rear++]=p->left;
         if(p->right!=NULL) num[rear++]=p->right;
     }
    printf("n");
 }
 int main(){
     srand(time(0));
     int n,mark[26];//标记数组,避免产生重复字母
     scanf("%d",&n);//二叉树的结点数
     Node *root=NULL;
     for(int i=0;i 

运行结果示例:

先序遍历: HBZUDA
中序遍历: BHDUZA
后序遍历: BDUAZH
层序遍历: HBZUAD

该示例二叉树如下图所示:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/989856.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号