服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言二叉树的遍历示例介绍

C语言二叉树的遍历示例介绍

2022-08-13 11:01不吃香菜的香菜头子 C/C++

大家好,本篇文章主要讲的是C语言二叉树的遍历示例介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览

     在本算法中先利用先序遍历创建了树,利用了递归的算法使得算法简单,操作容易,本来无printf("%c的左/右子树:", ch);的语句,但由于计算机需要输入空格字符来判断左右子树,为了减少人为输入的失误,特地加入这条语句,以此保证准确率。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW 3
 
typedef int Status; 
typedef int Boolean;
typedef char TElemType;
 
typedef struct BiTNode{
    TElemType      data;
    struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
 
//创建二叉树函数
 
Status CreateBiTree(BiTree &T){
    TElemType ch;
    scanf("%c", &ch);
    getchar();
    if(ch == ' '){  T = NULL;}
    else {
        if( !(T=(BiTree)malloc(sizeof(BiTNode))))(exit(OVERFLOW));
        T->data = ch;               
        printf("%c的左子树:", ch);
        CreateBiTree(T->lchild);    
        printf("%c的右子树:", ch);
        CreateBiTree(T->rchild); }
    return OK;
}
 
//先序遍历函数
Status PreOrderTraverse(BiTree T, Status (* Visit)(TElemType e)){
    if(T){
        if(Visit(T->data)){
            if(PreOrderTraverse(T->lchild, Visit)){
                if(PreOrderTraverse(T->rchild, Visit)){
                    return OK;
               }   
            }  
         }
        return ERROR;
    }
    else {return OK;}
}
 
//中序遍历函数
Status InOrderTraverse(BiTree T, Status (* Visit)(TElemType e)){
    if(T){
        if(PreOrderTraverse(T->lchild, Visit) ){
            if(Visit(T->data)){
                if(PreOrderTraverse(T->rchild, Visit) ){
                    return OK;
           }
       }   
   }
        return ERROR;
        }
    else {
        return OK;
        }
    }
 
//后序遍历函数
Status PosOrderTraverse(BiTree T, Status (* Visit)(TElemType e)){
    if(T){
        if(PreOrderTraverse(T->lchild, Visit) ){
            if(PreOrderTraverse(T->rchild, Visit) ){
                if(Visit(T->data)){return OK;
}
    }  
}
        return ERROR;}
    else {return OK;
}
}
 
 
//输出二叉树函数
Status PrintElement(TElemType e){  
    printf("%c",e);
    return OK;
}
 
//主函数
int main(){
    BiTree T;
    printf("输入根结点:");
    CreateBiTree(T);
    printf("先序遍历:\n");
    PreOrderTraverse(T, PrintElement);
    printf("\n");
    printf("中序遍历:\n");
    InOrderTraverse(T, PrintElement);
    printf("\n");
    printf("后序遍历:\n");
    PosOrderTraverse(T, PrintElement);
    return 0;
}

       遍历操作有四种,其不同在于对根结点的访问顺序不同。在先序遍历中,首先访问根结点,然后递归地做左子树的先序遍历,然后是右子树的递归先序遍历。 在中序遍历中,递归地对左子树进行中序遍历,访问根结点,最后递归中序遍历右子树。在后序遍历中,递归地对左子树和右子树进行后序遍历,然后访问根结点。先序,中序,后序遍历就是对于根节点的访问顺序。

       但无论哪种遍历方式,递归的方法是最简便,最直接,最简单的算法。

      运行截图:

C语言二叉树的遍历示例介绍

到此这篇关于C语言二叉树的遍历示例介绍的文章就介绍到这了,更多相关C语言二叉树内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/Yuto_1/article/details/122329549

延伸 · 阅读

精彩推荐
  • C/C++C++取得当前时间的方法

    C++取得当前时间的方法

    这篇文章主要介绍了C++取得当前时间的方法,实例展示了通过系统函数获取当前时间的实现方法,非常简单易懂,需要的朋友可以参考下...

    C++教程网8062021-02-14
  • C/C++C++实现寻找最低公共父节点的方法

    C++实现寻找最低公共父节点的方法

    这篇文章主要介绍了C++实现寻找最低公共父节点的方法,是数据结构中二叉树的一个经典算法,有一定的借鉴价值,需要的朋友可以参考下 ...

    C++教程网8472021-02-03
  • C/C++数字、字符、字符串? | C++ 与 Python 中的常用转换函数

    数字、字符、字符串? | C++ 与 Python 中的常用转换函数

    计算机底层是一堆逻辑电路,记录信息只能以数值的形式。因此对于一个字符 a ,计算机记录其为值 97 。 这个值与字符的对应关系是人们约定好的,这里...

    Piper蛋窝11122021-08-20
  • C/C++C++实现万年历源代码

    C++实现万年历源代码

    这篇文章主要介绍了C++实现万年历源代码,可以直接在VC6.0编译运行,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一...

    jxccy8885032021-08-26
  • C/C++详解C语言对字符串处理函数的实现方法

    详解C语言对字符串处理函数的实现方法

    这篇文章主要为大家介绍了C语言对字符串处理函数的实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助...

    GREEN@dehua10442022-08-01
  • C/C++C语言实现520表白代码 祝你表白成功!

    C语言实现520表白代码 祝你表白成功!

    这篇文章主要为大家详细介绍了C语言实现520表白代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    岩枭6542021-07-29
  • C/C++详解数据结构C语言实现之循环队列

    详解数据结构C语言实现之循环队列

    在我们生活中有很多队列的影子,可以说与时间相关的问题,一般都会涉及到队列问题;本文详细介绍了如何使用C语言实现循环队列,下面一起来看看。...

    daisy3512021-04-12
  • C/C++冒泡排序的三种实现方法

    冒泡排序的三种实现方法

    本篇文章是对冒泡排序的三种实现方法进行了详细的介绍,需要的朋友可以过来参考下。希望对大家有所帮助...

    c语言程序设计4822021-01-06