实验三 二叉树的基本操作(建立)及遍历

简介: 实验三 二叉树的基本操作(建立)及遍历

实验三 二叉树的基本操作(建立)及遍历

实验目的

1.学会实现二叉树结点结构和对二叉树的基本操作。

2.通过对二叉树遍历操作的实现,理解二叉树各种操作,学会利用递归方法编写对二叉树等类似递归数据结构进行处理的算法。

实验要求

1.认真阅读和掌握和本实验相关的教材内容。

2.编写完整程序完成下面的实验内容并上机运行。

实验内容

1.编写程序输入二叉树的结点个数和结点值,构造下图所示的二叉树。

2.编写程序,采用中序遍历的递归和非递归算法对此二叉树进行遍历。

image.png

提示

从键盘接受输入(先序),以二叉链表作为存储结构,建立二叉树(以先序来建立),

[测试数据]

如输入:ABC##DE#G##F###(其中#表示空格字符)

则输出结果为

先序:ABCDEGF

中序:CBEGDFA

后序:CGEFDBA

层序:ABCDEFG


下面是代码,供参考:

#include <stdio.h>
#include <stdlib.h>
#define MAX 20
#define NULL 0
typedef char TElemType;
typedef int  Status;
typedef struct BiTNode
{
    TElemType data;
    struct BiTNode *lchild,*rchild;
} BiTNode,*BiTree;
Status CreateBiTree(BiTree *T) ///BiTNode T
{
    char ch;
    ch=getchar();
    if(ch=='#')(*T)=NULL;///#代表空指针
    else
    {
        (*T)=(BiTree)malloc(sizeof(BiTNode));
        (*T)->data=ch;///生成根结点
        CreateBiTree(&(*T)->lchild);///构造左子树
        CreateBiTree(&(*T)->rchild);///构造右子树
    }
    return 1;
}
///先序遍历输出
void PreOrder(BiTree T)
{
    if(T)
    {
        printf("%2c",T->data);///T->data==(*T).data
        PreOrder(T->lchild);///先序遍历左子树
        PreOrder(T->rchild);///先序遍历右子树
    }
}
///中序遍历输出
void InOrder(BiTree T)
{
    if(T)
    {
        InOrder(T->rchild);///中序遍历右子树
        printf("%2c",T->data);
        InOrder(T->lchild);///中序遍历左子树
    }
}
///后序遍历输出
void Postorder(BiTree T)
{
    if(T)
    {
        Postorder(T->lchild);///后序遍历左子树
        Postorder(T->rchild);///后序遍历右子树
        printf("%2c",T->data);///访问根结点
    }
}
///层次遍历二叉树T,从第一层开始,每层从左到右
void LevleOrder(BiTree T)
{
    BiTree Queue[MAX],b;
    ///用一维数组表示队列,front和rear分别表示队首和队尾指针
    int front,rear;
    front=rear=0;
    if(T) ///若树非空
    {
        Queue[rear++]=T;///根结点入队列
        while(front!=rear) ///当队列非空
        {
            b=Queue[front++];///队首元素出队列,并访问这个结点
            printf("%2c",b->data);
            if(b->lchild!=NULL)
            {
                Queue[rear++]=b->lchild;
                ///左子树非空,则入队列
            }
            if(b->rchild!=NULL)
            {
                Queue[rear++]=b->rchild;
                ///右子树非空,则入队列
            }
        }
    }
}
///求二叉树的深度
int depth(BiTree T){
    int dep1,dep2;
    if(T==NULL)  return 0;
    else
    {
        dep1=depth(T->lchild);
        dep2=depth(T->rchild);
        return dep1>dep2?dep1+1:dep2+1;
    }
}
int main()
{
    BiTree T=NULL;///(开始定义的是*T)此时T为地址
    printf("\n(Create a Binary Tree )建立一棵二叉树T:\n");
    CreateBiTree(&T);///建立一棵二叉树
    printf("\nThe preorder(先序序列为)is:\n");
    PreOrder(T);
    printf("\nThe inorder(中序序列为)is:\n");
    InOrder(T);
    printf("\nThe Postorder(后序序列为)is:\n");
    Postorder(T);
    printf("\nThe levle order(层次序列为)is:\n");
    LevleOrder(T);
    printf("\nThe depth(深度)is:%d\n",depth(T));
    getchar();
    return 0;
}


目录
相关文章
|
存储 资源调度 负载均衡
双活中心资源利用率提升
双活中心资源利用率提升
152 5
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL的数据库集群
PostgreSQL的逻辑存储结构涵盖了数据库集群、数据库、表、索引、视图等对象,每个对象都有唯一的oid标识。数据库集群是由单个PostgreSQL实例管理的所有数据库集合,共享同一配置和资源。集群的数据存储在一个称为数据目录的单一目录中,可通过-D选项或PGDATA环境变量指定。
245 3
|
编解码 网络协议 数据安全/隐私保护
计网 - 图解OSI 七层模型 和 TCP/IP 四层模型
计网 - 图解OSI 七层模型 和 TCP/IP 四层模型
1318 0
|
存储 固态存储 文件存储
磁盘文件的读写是怎样进行的
深入理解磁盘文件读写操作
|
应用服务中间件 Apache
Tomcat国内镜像下载地址【速度超快】
Tomcat国内镜像下载地址【速度超快】
3629 0
实验二 栈和队列的应用
实验二 栈和队列的应用
200 0
|
存储 C语言 C++
实验一 线性表的基本操作
实验一 线性表的基本操作
375 0
|
云安全 SQL 运维
上云安全必须了解的安全产品-阿里云盾
据国家互联网应急中心(CNCERT)今年4月发布的《2018年我国互联网网络安全态势报告》显示,CNCERT协调处置网络安全事件约10.6万起,其中安全漏洞、网页仿冒事件最多。而在各类型网络安全事件数量中,云平台上的攻击次数、被篡改网站数量均占比超过50%。
上云安全必须了解的安全产品-阿里云盾
|
机器学习/深度学习 人工智能 自然语言处理