实验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 三、实验内容 在...
在本实验报告中,我们探讨了二叉树的基本操作,主要涉及了二叉树的构建以及遍历。二叉树是一种特殊的数据结构,每个节点最多有两个子节点,通常分为左子节点和右子节点。本实验的目标是使用二叉链表作为存储结构,...
在本实验中,我们主要关注的是二叉树的链式存储结构及其操作,包括二叉树的建立、遍历算法以及查找特定元素。这个实验旨在加深对数据结构中二叉树概念的理解,以及掌握C语言实现这些操作的方法。 首先,二叉树是一...
在本实验中,广州大学的学生们被要求实现二叉树的基本操作和算法,包括二叉树的创建、遍历以及特殊类型如线索二叉树的处理。 首先,二叉树的基本操作算法涉及到从给定的字符串构建二叉树。这通常通过先序遍历的方式...
实验六 二叉树操作.cpp
1、 创建二叉树类。二叉树的存储结构使用链表。 2、 提供操作:前序遍历、中序遍历、后序遍历、层次遍历、计算二叉树结点数目...4、 接收键盘录入的二叉树前序序列和中序序列(各元素各不相同),输出该二叉树的后序序列。
在这个《数据结构课程设计》项目中,我们专注于二叉树的基本操作,通过两个源文件(file1.cpp 和 file2.cpp)以及一个头文件(head.h)实现了一系列的二叉树操作。以下是这些操作的详细说明: 1. **创建二叉树**:...
在数据结构实验中,你可能会涉及二叉树的各种操作的代码实现,包括创建、插入、删除、查找、遍历等功能。通过编写这些代码,你可以更好地理解二叉树的工作原理及其在实际问题中的应用。实验报告通常会包含设计思路、...
二叉树基本操作数据结构实验报告 本实验报告旨在实现二叉树的基本操作,包括定义二叉树的结构类型、初始化二叉树、检查二叉树是否为空、前序、中序、后序遍历树的方式、求树的深度、求树的结点数目、清空二叉树等九...
4. **查找操作** - 二叉查找树(BST)中,如果目标值小于当前节点,则在左子树中查找;反之,在右子树中查找,直到找到目标节点或遍历完所有节点。 5. **删除操作** - 删除节点可能涉及替换、重新调整链接关系等...
这个实验不仅锻炼了我们对二叉树基本概念的理解,还强化了我们利用数组实现二叉树操作的技能,这对于在实际的编程和算法设计中处理树形结构的问题至关重要。通过这样的实践,我们可以更好地理解和应用二叉树的性质,...
本人本科期间数据结构二叉树的实验 1、建立二叉树的存储结构 2、先序、中序、后序遍历二叉树(要求任选某一种用非递归算法完成) 3、查询二叉树中某个结点 4、统计二叉树中叶子结点的个数 5、求二叉树的深度 6、要求...
本实验"实验六 二叉树操作.docx"显然着重于探讨如何操作和遍历二叉树,特别是通过层序遍历的方式。在这个过程中,我们将深入理解二叉树的性质、层序遍历的概念,以及如何实现这一遍历方法。 首先,二叉树是由节点...