数据结构教程 第二十七课 实验六 二叉树实验

教学目的: 掌握二叉树的链式存储结构

教学重点: 二叉树的链式存储实现方法

教学难点:

授课内容:

生成如下二叉树,并得出三种遍历结果:

一、二叉树的链式存储结构表示

typedef struct BiTNode{

TElemType data;

struct BitNode *lchild,*rchild;

}BiTNode,*BiTree;

二、二叉树的链式存储算法实现

CreateBiTree(&T,definition);

InsertChild(T,p,LR,c);

三、二叉树的递归法遍历

PreOrderTraverse(T,Visit());

InOrderTraverse(T,Visit());

PostOrderTraverse(T,Visit());

示例源程序

#include <alloc.h>

#define ERROR 0;
#define OK 1;

typedef int ElemType;

typedef struct BinaryTree

{
  ElemType data;
  struct BinaryTree *l;
  struct BinaryTree *r;
}*BiTree,BiNode;

BiNode * new()
{
  return( (BiNode *)malloc(sizeof(BiNode)) );
}

CreateSubTree(BiTree *T,ElemType *all,int i)
{
  if ((all[i]==0)||i>16)
    {
      *T=NULL;
      return OK;
    }
  *T=new();
  if(*T==NULL) return ERROR;
  (*T)->data=all[i];
  CreateSubTree(&((*T)->l),all,2*i);
  CreateSubTree(&((*T)->r),all,2*i+1);
}

CreateBiTree(BiTree *T)
{
  ElemType all[16]={0,1,2,3,0,0,4,5,0,0,0,0,6,0,0,0,};
  CreateSubTree(T,all,1);
}

printelem(ElemType d)
{
  printf("%d\n",d);
}

PreOrderTraverse(BiTree T,int (*Visit)(ElemType d))
{
  if(T){
    if(Visit(T->data))
      if(PreOrderTraverse(T->l,Visit))
	if(PreOrderTraverse(T->r,Visit)) return OK;
    return ERROR;
  } else  return OK;
}
main()
{
  BiTree root;
  CreateBiTree(&root);
  PreOrderTraverse(root,printelem);

}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索存储
, struct
, return
, all
, 二叉树链式存储
, 链式二叉树
链式
数据结构二叉树实验、数据结构实验教程、数据结构 二叉树、二叉树的顺序存储结构、数据结构二叉树遍历,以便于您获取更多的相关知识。

时间: 2024-11-10 01:03:15

数据结构教程 第二十七课 实验六 二叉树实验的相关文章

数据结构教程 第二十一课 树、二叉树定义及术语

教学目的: 掌握树.二叉树的基本概念和术语,二叉树的性质 教学重点: 二叉树的定义.二叉树的性质 教学难点: 二叉树的性质 授课内容: 一.树的定义: 树是n(n>=0)个结点的有限集.在任意一棵非空树中: (1)有且仅有一个特定的称为根的结点: (2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,...Tm,其中每一个集合本身又是一棵树,并且称为根的子树. 二.树的基本概念: 树的结点包含一个数据元素及若干指向其子树的分支. 结点拥有的子树数称为结点的度. 度为0

数据结构教程 第十七课 实验三:栈的表示与实现及栈的应用

教学目的: 掌握栈的存储表示方式和栈基本操作的实现方法 教学重点: 栈的基本操作实现方法,栈的应用 教学难点: 栈的存储表示 实验内容: 一.栈的实现 实现栈的顺序存储. 栈实现示例 #include<stdio.h> #include<malloc.h> #include<conio.h> #define ERROR 0 #define TRUE 1 #define FALSE 0 #define OK 1 #define EQUAL 1 #define OVERFL

数据结构教程 第二十三课 二叉树的存储结构

教学目的: 掌握二叉树的两种存储结构 教学重点: 链式存储结构 教学难点: 链式存储二叉树的基本操作 授课内容: 一.复习二叉树的定义 二叉树的基本特征:每个结点的度不大于2. 二.顺序存储结构 #define MAX_TREE_SIZE 100 typedef TElemType SqBiTree[MAX_TREE_SIZE]; SqBiTree bt; 结点编号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 结点值 1 2 3 4 5 0 0 0 0 6 7 0 0

数据结构教程 第二十课 广义表

教学目的: 广义表的定义及存储结构 教学重点: 广义表的操作及意义 教学难点: 广义表存储结构 授课内容: 一.广义表的定义 广义表是线性表的推广,其表中的元素可以是另一个广义表,或其自身. 广义表的定义: ADT GList{ 数据对象:D={i=1,2,...,n>=0;ei(-AtomSet或ei(-GList, AtomSet为某个数据对象} 数据关系:R1={<ei-1,ei>|ei-1,ei(-D,2=<i<=n} 基本操作: InitGlist(&L);

数据结构教程 第二十四课 遍历二叉树

教学目的: 掌握二叉树遍历的三种方法 教学重点: 二叉树的遍历算法 教学难点: 中序与后序遍历的非递归算法 授课内容: 一.复习二叉树的定义 二叉树由三个基本单元组成:根结点.左子树.右子树 问题:如何不重复地访问二叉树中每一个结点? 二.遍历二叉树的三种方法: 先序 1 访问根结点 2 先序访问左子树 3 先序访问右子树 中序 1 中序访问左子树 2 中序访问根结点 3 中序访问右子树 后序 1 后序访问左子树 2 后序访问右子树 3 访问根结点 三.递归法遍历二叉树 先序: Status(P

数据结构教程 第二十六课 图的定义与术语

教学目的: 掌握图的定义及常用术语 教学重点: 图的常用术语 教学难点: 图的常用术语 授课内容: 一.图的定义 图是一种数据元素间为多对多关系的数据结构,加上一组基本操作构成的抽象数据类型. ADT Graph{ 数据对象V :V是具有相同特性的数据元素的集合,称为顶点集. 数据关系R: R={VR} VR={<v,w>|v,w(-V且P(v,w),<v,w>表示从v到w的弧,谓词P(v,w)定义了弧<v,w>的意义或信息} 基本操作P: CreateGraph(&a

数据结构教程 第二十二课 实验五 数组实验

教学目的: 掌握二维数组的实现方法 教学重点: 二维数组的存储表示,二维数组的基本操作 教学难点: 二维数组的基本操作 授课内容: 数组的顺序存储表示和实现: #include<stdarg.h> #define MAX_ARRAY_DIM 8 typedef struct { ElemType *base; int dim; int *bounds; int *constants; }Array; Status InitArray(Array &A,int dim,...); Sta

数据结构教程 第二课 抽象数据类型的表示与实现

本课主题: 抽象数据类型的表示与实现 教学目的: 了解抽象数据类型的定义.表示和实现方法 教学重点: 抽象数据类型表示法.类C语言语法 教学难点: 抽象数据类型表示法 授课内容: 一.抽象数据类型定义(ADT) 作用:抽象数据类型可以使我们更容易描述现实世界.例:用线性表描述学生成绩表,用树或图描述遗传关系. 定义:一个数学模型以及定义在该模型上的一组操作. 关键:使用它的人可以只关心它的逻辑特征,不需要了解它的存储方式.定义它的人同样不必要关心它如何存储. 例:线性表这样的抽象数据类型,其数学

数据结构教程 第七课 实验一 线性表的顺序存储实验

本课主题: 实验一 线性表的顺序存储实验 教学目的: 掌握顺序表的定义及操作的C语言实现方法 教学重点: 顺序表的操作的C语言实现方法 教学难点: 顺序表的操作的C语言实现方法 实验内容: 利用顺序表完成一个班级的一个学期的所有课程的管理:能够增加.删除.修改学生的成绩记录. 实验要求: 在上机前写出全部源程序.