C语言实现二叉树:数据结构实验报告

一、实验目的

  1. 掌握二叉树的基本概念和基本操作;
  2. 熟悉二叉树的遍历方式(前序遍历、中序遍历、后序遍历);
  3. 了解二叉树的应用。

二、实验内容

  1. 二叉树的创建和销毁;
  2. 二叉树的遍历方式(前序遍历、中序遍历、后序遍历);
  3. 二叉树的查找和插入操作;
  4. 二叉树的删除操作。

三、实验步骤

1. 二叉树的创建和销毁

二叉树的创建可以通过递归的方式来实现,具体代码如下:

typedef struct node{
    int data;
    struct node *left,*right;
}node;

node *create_tree(){
    int data;
    node *p;
    scanf('%d',&data);
    if(data==-1)
        p=NULL;
    else{
        p=(node*)malloc(sizeof(node));
        p->data=data;
        p->left=create_tree();
        p->right=create_tree();
    }
    return p;
}

二叉树的销毁也可以使用递归的方式来实现,具体代码如下:

void destroy_tree(node *p){
    if(p!=NULL){
        destroy_tree(p->left);
        destroy_tree(p->right);
        free(p);
    }
}

2. 二叉树的遍历方式

二叉树的遍历方式有三种:前序遍历、中序遍历、后序遍历,具体代码如下:

void pre_order(node *p){
    if(p!=NULL){
        printf('%d ',p->data);
        pre_order(p->left);
        pre_order(p->right);
    }
}

void in_order(node *p){
    if(p!=NULL){
        in_order(p->left);
        printf('%d ',p->data);
        in_order(p->right);
    }
}

void post_order(node *p){
    if(p!=NULL){
        post_order(p->left);
        post_order(p->right);
        printf('%d ',p->data);
    }
}

3. 二叉树的查找和插入操作

二叉树的查找和插入操作也可以使用递归的方式来实现,具体代码如下:

node *search(node *p,int data){
    if(p==NULL)
        return NULL;
    if(p->data==data)
        return p;
    else if(p->data>data)
        return search(p->left,data);
    else
        return search(p->right,data);
}

node *insert(node *p,int data){
    if(p==NULL){
        p=(node*)malloc(sizeof(node));
        p->data=data;
        p->left=NULL;
        p->right=NULL;
    }
    else if(p->data>data)
        p->left=insert(p->left,data);
    else
        p->right=insert(p->right,data);
    return p;
}

4. 二叉树的删除操作

二叉树的删除操作需要考虑多种情况,具体代码如下:

node *delete(node *p,int data){
    node *temp,*child;
    if(p==NULL)
        return NULL;
    if(p->data==data){
        if(p->left==NULL){
            temp=p->right;
            free(p);
            return temp;
        }
        else if(p->right==NULL){
            temp=p->left;
            free(p);
            return temp;
        }
        else{
            temp=p->right;
            child=p->right;
            while(child->left!=NULL)
                child=child->left;
            child->left=p->left;
            free(p);
            return temp;
        }
    }
    else if(p->data>data)
        p->left=delete(p->left,data);
    else
        p->right=delete(p->right,data);
    return p;
}

四、实验结果

通过本次实验,我掌握了二叉树的基本概念和基本操作,熟悉了二叉树的遍历方式,并且了解了二叉树的应用。在实际应用中,二叉树可以用来表示一些复杂的数据结构,例如文件系统,数据库等等。


原文地址: https://www.cveoy.top/t/topic/n39i 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录