[树]二叉树的建立以及三种遍历

来源:互联网 发布:apache 双向认证 编辑:程序博客网 时间:2024/06/05 06:43

(上机练习)二叉树的建立以及三种遍历


1. 目的

  • 设计数据结构和算法,实现按层次构造二叉树的算法
  • 掌握树的前根序、中根序和后根序遍历算法

2. 内容

按层次(从上到下,从左到右的顺序)输入树的结点,如果该结点为空,则用一个特定的值替代(比如0或者.)。要求构造一棵如下的二叉树,当二叉树构造成功后,需要对其进行先序遍历,后序遍历,中序遍历。

3. 思路

用链式存储方式,存储二叉树T,并对其用递归方式,用三种方式遍历。

4. 主要函数

  • void InitBiTree(BiTree &T)
    初始化树T,将头节点置空
  • void CreatBiTree(BiTree &T)
    构造二叉树,按先序次序次序输入节点值,^表示空树
  • void PreOrderTraverse(BiTree &T)
    先序遍历二叉树
  • void InOrderTraverse(BiTree &T)
    中序遍历二叉树
  • void PostOrderTraverse(BiTree &T)
    后序遍历二叉树
  • void Interface()
    打印交互界面

5. 代码

#include<stdio.h>#include<stdlib.h> #include<malloc.h>typedef struct BiTNode{    char data;    BiTNode *lchild, *rchild; }BiTNode, *BiTree;void InitBiTree(BiTree &T){    T = NULL; }void CreatBiTree(BiTree &T) //按先序次序次序输入节点值,^表示空树 {    char c;     getchar();    scanf("%c", &c);    if(c == '^')        T = NULL;    else    {        if(!(T = (BiTNode *)malloc(sizeof(BiTNode))))            exit(0);        else            T -> data = c;            printf("请输入%c的左孩子:\n", c);            CreatBiTree(T -> lchild);            printf("请输入%c的右孩子:\n", c);            CreatBiTree(T -> rchild);    }}void PreOrderTraverse(BiTree &T){    if(T == NULL)        return;    else    {        printf("%c", T -> data);        PreOrderTraverse(T -> lchild);        PreOrderTraverse(T -> rchild);          }}void InOrderTraverse(BiTree &T){    if(T == NULL)        return;    else    {        InOrderTraverse(T -> lchild);        printf("%c", T -> data);        InOrderTraverse(T -> rchild);    }}void PostOrderTraverse(BiTree &T){    if(T == NULL)        return;    else    {        PostOrderTraverse(T -> lchild);        PostOrderTraverse(T -> rchild);        printf("%c", T -> data);    }}void Interface(){    printf("               二叉树               \n");     printf("====================================\n");    printf("            1.建立二叉树            \n");     printf("            2.先序遍历              \n");     printf("            3.中序遍历              \n");     printf("            4.后序遍历              \n");     printf("            0.退出                  \n");     printf("====================================\n");}int main(){    int n, a = 1;    BiTree T;    InitBiTree(T);    while(a)    {        Interface();        scanf("%d", &n);        switch(n)        {            case 1:                printf("请按先序输入二叉树:\n");                printf("请输入根节点:\n");                CreatBiTree(T);                printf("二叉树建立成功\n");                break;            case 2:                PreOrderTraverse(T);                    break;                   case 3:                InOrderTraverse(T);                break;            case 4:                PostOrderTraverse(T);                break;            case 0:                return 0;            default:                printf("输入错误\n");                break;        }        system("pause");        system("cls");    }    return 0;} 

5. 运行结果

以先序遍历顺序为bac的二叉树为例




6. 收获总结

  • malloc函数返回值为void*, 使用时要强制转换
  • system(“pause”)以及system(“cls”)可以实现暂停显示和清屏功能,归属于头文件
0 0