`
ye_haiqiang
  • 浏览: 88793 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

实验4 二叉树操作

 
阅读更多

实验4 二叉树操作

 

一、实验目的

1.熟悉树的存储结构;

2.熟悉二叉链表的创建;

3.熟悉二叉树的遍历操作和其他操作。

二、实验内容

1、针对如图所示的二叉树,用先序遍历方法创建该二叉树的二叉链表存储;

2 在第1步基础上,用非递归中序遍历方法和后序递归遍历方法,分别输出遍历结果;

3、用非递归方法找出该二叉树的所有叶子结点并输出。

 

 

 

三、实验要求

1.每个同学必须独立完成;

2.程序中的开头部分必须对本程序的总体功能进行注释;程序中每个函数段必须要有注释说明该函数的功能或作用;

3.上机进行调试和修改并填写实验报告;

4.实验报告中的源程序必须调试通过。

5.在体会中描述如下内容:

1)对算法与程序的区别上的体会。

2)本次实验过程的体会,是否自己独立完成?最大的困难是什么?自己准备如何解决这个困难?

6.提交实验报告(报告中包含关键源代码)。

 

参考实验代码:

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>

typedef struct Binnode{
    char data;
    struct Binnode *lchild;
    struct Binnode *rchild;
  }Binnode;

   /*按照前序遍历建立二叉树*/
void Creat_Bintree(Binnode **t)
{
   char ch;
   scanf("\n%c",&ch);
   if(ch=='0') *t=NULL;
   else
     {
       *t=(Binnode*)malloc(sizeof(Binnode));
       if(!*t)exit(OVERFLOW);
       (*t)->data=ch;
       printf("%c: left",ch); Creat_Bintree(&(*t)->lchild);
       printf("%c: right",ch);Creat_Bintree(&(*t)->rchild);
     }
}

/* 按照后序递归遍历二叉树*/
void Posorder1(Binnode *t)
{  /* printf("\n输出后序递归遍历序列:");*/
    if(t!=NULL)
    {
        Posorder1(t->lchild);
        Posorder1(t->rchild);
        printf("%c",t->data);
    }
}

/*按照中序非递归遍历二叉树*/
void Inorder2(Binnode *root)/*中序非递归遍历二叉树*/
{   Binnode  *p,*stack[100];
     int top=0;
      p=root;
do{
    while(p!=NULL)
    {
      top++;
      stack[top]=p;
      p=p->lchild;
    }
    if(top>0)
   {
     p=stack[top];/*p所指的节点为无左子树或其左子树已经遍历过*/
      top--;
     printf("%c",p->data);
     p=p->rchild;
   }
}while(p!=NULL||top!=0);
}

/*非递归法求叶子结点个数*/
int Leaves_Num2(Binnode *t)
{
    Binnode *s[100];
    int count=0,top=0;
    while(t||top>0)
    {
        if(t)
        {
             s[top++]=t;
             if(t->lchild==NULL&&t->rchild==NULL)
             {
                count++;
              printf("%c",t->data);/*输出叶子结点*/
             }
             t=t->lchild;
         }
        else
         {
            t=s[--top]->rchild;
         }
    }
    return count;
}
 
int main()
{
    Binnode *proot=NULL;
    int p,q;
    printf("1.CreateBitree:\n");
    Creat_Bintree(&proot); /*建立二叉树时,无左右孩子的结点输入’0’值*/
    printf("\n5.Output Not Digui InOrder:\n");
    Inorder2(proot);
    printf("\n6.Output Digui PostOrder:\n");
    Posorder1(proot);
    printf("\n11.Leaves_Node:\n");
    q=Leaves_Num2(proot);
    printf("\n12.Output Not Digui Leaves_Num:%d\n",q);
 
    return 0;
}

 

 

分享到:
评论

相关推荐

    二叉树实验三 二叉树的综合操作

    根据给定的文件信息,我们可以总结出以下关于“二叉树实验三 二叉树的综合操作”的相关知识点: ### 一、实验性质与要求 #### 实验性质 本实验为综合性实验,旨在通过实际编程操作来加深对二叉树理论的理解。 ###...

    实验四 二叉树基本操作的实现

    在本实验中,我们将深入探讨数据结构中的一个重要概念——二叉树,并实现其基本操作。二叉树是一种非线性的数据结构,它由一个有限集合的节点构成,每个节点最多有两个子节点,通常称为左子节点和右子节点。这个实验...

    数据结构实验-二叉树的基本操作

    运用二叉链表实现二叉树的基本操作,包括:创建二叉树的存储结构、复制已有的二叉树、计算已有的二叉树的深度、先根序序列、中根序序列、后根序序列等。 输入格式:AB#C##D## 二、实验目的 掌握二叉链表及二叉树的...

    数据结构实验:二叉树的基本操作

    南邮数据结构实验使用C++描述,二叉树的基本操作

    实验五 二叉树的基本操作实现

    在本实验中,我们将学习二叉树的基本操作,包括二叉树的建立、遍历、结点数统计、深度计算和叶子结点个数统计。 一、实验目的 实验目的旨在熟悉二叉树结点的结构和对二叉树的基本操作。通过本实验,学生将掌握对...

    实验七 二叉树操作验证

    在本实验"实验七 二叉树操作验证"中,主要目标是掌握二叉树的基本概念和操作。二叉树是一种非线性数据结构,它由一个有限集合构成,其中包含一个特殊的称为根的节点,其余节点分为两部分:一部分是根的子树,另一...

    实验五 二叉树的创建和遍历

    一、实验目的 1.掌握二叉树的二叉表存储结构。 2.掌握利用二叉树创建方法。 3.掌握二叉树的先序,中序,后序的递归实现方法。 二、实验环境( 硬件/软件要求 ) Windows XP/Windows 7,Visual C++ 6.0 三、实验内容 在...

    数据结构二叉树的基本操作实验报告

    在本实验报告中,我们探讨了二叉树的基本操作,主要涉及了二叉树的构建以及遍历。二叉树是一种特殊的数据结构,每个节点最多有两个子节点,通常分为左子节点和右子节点。本实验的目标是使用二叉链表作为存储结构,...

    实验五、二叉树操作及应用.docx

    在本实验中,我们主要关注的是二叉树的链式存储结构及其操作,包括二叉树的建立、遍历算法以及查找特定元素。这个实验旨在加深对数据结构中二叉树概念的理解,以及掌握C语言实现这些操作的方法。 首先,二叉树是一...

    广州大学 数据结构实验报告 实验二 二叉树的操作与实现

    在本实验中,广州大学的学生们被要求实现二叉树的基本操作和算法,包括二叉树的创建、遍历以及特殊类型如线索二叉树的处理。 首先,二叉树的基本操作算法涉及到从给定的字符串构建二叉树。这通常通过先序遍历的方式...

    实验六 二叉树操作.cpp

    实验六 二叉树操作.cpp

    数据结构实验-二叉树操作

    1、 创建二叉树类。二叉树的存储结构使用链表。 2、 提供操作:前序遍历、中序遍历、后序遍历、层次遍历、计算二叉树结点数目...4、 接收键盘录入的二叉树前序序列和中序序列(各元素各不相同),输出该二叉树的后序序列。

    《数据结构课程设计》二叉树基本操作实验程序(10种基本操作)

    在这个《数据结构课程设计》项目中,我们专注于二叉树的基本操作,通过两个源文件(file1.cpp 和 file2.cpp)以及一个头文件(head.h)实现了一系列的二叉树操作。以下是这些操作的详细说明: 1. **创建二叉树**:...

    数据结构实验(二叉树)

    在数据结构实验中,你可能会涉及二叉树的各种操作的代码实现,包括创建、插入、删除、查找、遍历等功能。通过编写这些代码,你可以更好地理解二叉树的工作原理及其在实际问题中的应用。实验报告通常会包含设计思路、...

    二叉树基本操作 数据结构 实验报告

    二叉树基本操作数据结构实验报告 本实验报告旨在实现二叉树的基本操作,包括定义二叉树的结构类型、初始化二叉树、检查二叉树是否为空、前序、中序、后序遍历树的方式、求树的深度、求树的结点数目、清空二叉树等九...

    数据结构实验-二叉树

    4. **查找操作** - 二叉查找树(BST)中,如果目标值小于当前节点,则在左子树中查找;反之,在右子树中查找,直到找到目标节点或遍历完所有节点。 5. **删除操作** - 删除节点可能涉及替换、重新调整链接关系等...

    实验六 二叉树操作.pdf

    这个实验不仅锻炼了我们对二叉树基本概念的理解,还强化了我们利用数组实现二叉树操作的技能,这对于在实际的编程和算法设计中处理树形结构的问题至关重要。通过这样的实践,我们可以更好地理解和应用二叉树的性质,...

    数据结构实验——二叉树相关操作

    本人本科期间数据结构二叉树的实验 1、建立二叉树的存储结构 2、先序、中序、后序遍历二叉树(要求任选某一种用非递归算法完成) 3、查询二叉树中某个结点 4、统计二叉树中叶子结点的个数 5、求二叉树的深度 6、要求...

    实验六 二叉树操作.docx

    本实验"实验六 二叉树操作.docx"显然着重于探讨如何操作和遍历二叉树,特别是通过层序遍历的方式。在这个过程中,我们将深入理解二叉树的性质、层序遍历的概念,以及如何实现这一遍历方法。 首先,二叉树是由节点...

Global site tag (gtag.js) - Google Analytics