实验五树与二叉树

2024-07-25

实验五树与二叉树(共4篇)

篇1:实验五树与二叉树

实验报告 二叉树

一 实验目的

1、进一步掌握指针变量,动态变量的含义;

2、掌握二叉树的结构特性以及各种存储结构的特点及适用范围。

3、掌握用指针类型描述、访问和处理二叉树的运算。

4、熟悉各种存储结构的特征以及如何应用树结构解决具体问题。

二 实验原理

树形结构是一种应用十分广泛和重要的非线性数据结构,是一种以分支关系定义的层次结构。在这种结构中,每个数据元素至多只有一个前驱,但可以有多个后继;数据元素之间的关系是一对多的层次关系。树形结构主要用于描述客观世界中具有层次结构的数据关系,它在客观世界中大量存在。遍历二叉树的实质是将非线性结构转为线性结构。

三 使用仪器,材料 计算机 2 Wndows xp 3 VC6.0

四实验步骤

【问题描述】建立一个二叉树,请分别按前序,中序和后序遍历该二叉树。【基本要求】从键盘接受输入(按前序顺序),以二叉链表作为存储结构,建立二叉树(以前序来建立),并采用递归算法对其进行前序,中序和后序遍历,将结果输出。

【实现提示】按前序次序输入二叉树中结点的值(一个整数),0表示空树,叶子结点的特征是其左右孩子指针为空。

五实验过程原始记录 基本数据结构描述; 2 函数间的调用关系; 用类C语言描述各个子函数的算法; 附录:源程序。

六 试验结果分析

将实验结果分析、实验中遇到的问题和解决问题的方法以及关于本实验项目的心得体会,写在实验报告上。

篇2:实验五树与二叉树

实 验 报 告 册

课程名称:算法与数据结构

实验项目名称: 实验5.二叉树 实验学时: 4 学生学号与姓名: 实验地点: 数计楼四楼 实验日期: 年 月 日 指导老师:

实验5 二叉树

一、实验目的和要求

(1)掌握二叉树的生成,以及前、中、后序遍历算法。(2)掌握应用二叉树递归遍历思想解决问题的方法。

二、实验仪器和设备

Visual C++ 6.0

三、实验内容与过程

1.建立一棵二叉树。对此树进行前序遍历、中序遍历及后序遍历,输出遍历序列。

2.在第一题基础上,求二叉树中叶结点的个数。3.在第一题基础上,求二叉树的深度。

程序清单: 1.2.3.赣南师范大学数学与计算机科学学院

四、实验结果与分析(程序运行结果及其分析)

篇3:实验8 二叉树的基本操作

班级: 学号:

一、题目

由数字序列生成二叉树 假设我们有这样的二叉树:

节点的元素(key)是正整数,且互不相同。可能给出这样一个虚拟的树更有利于理解输入。是的,我们的输入是上图的先序遍历;

即,要求根据1 3 0 2 0 0 4 5 0 0 0这样的输入,构造出一棵只含有正整数节点的二叉树。

【输入】

扩展的二叉树的先序遍历 【输出】

构造的简单树的节点个数 【样例输入】 3 0 2 0 0 4 5 0 0 0 【样例输出】

二、程序清单

三、程序调试过程中所出现的错误

四、运行结果(界面):

篇4:数据结构二叉树操作验证实验报告

成绩:_________

实验七 二叉树操作验证

一、实验目的

⑴ 掌握二叉树的逻辑结构;

⑵ 掌握二叉树的二叉链表存储结构;

⑶ 掌握基于二叉链表存储的二叉树的遍历操作的实现。

二、实验内容

⑴ 建立一棵含有n个结点的二叉树,采用二叉链表存储;

⑵ 前序(或中序、后序)遍历该二叉树。

三、设计与编码

#include using namespace std;template class BTree;template //***********************二叉树结点类定义********************** class BTreeNode { friend class BTree ;T data;BTreeNode *lchild,*rchild;public: BTreeNode():lchild(NULL),rchild(NULL){} BTreeNode(T d,BTreeNode *r=NULL):data(d),lchild(l),rchild(r){}

*l=NULL,BTreeNode T getdata(){return data;} BTreeNode * getleft(){return lchild;} BTreeNode * getright(){return rchild;} };//***********************END******************************** //***********************二叉树模板类定义******************* template class BTree { public: BTree(T a[],int n);void preorder(void visit(BTreeNode *p));static void preorder(BTreeNode * p,void visit(BTreeNode *p));//递归前序遍历

void inorder(void visit(BTreeNode *p));static void inorder(BTreeNode * p,void visit(BTreeNode *p));//递归中序遍历

void postorder(void visit(BTreeNode *p));static void postorder(BTreeNode * p,void visit(BTreeNode * p));//递归后序遍历

static void fun(BTreeNode *p){cout <

data;}//访问结点 protected: BTreeNode * root;private: T* a;int n;BTreeNode * build0(int i);};

//***********************建树******************************* template BTreeNode * BTree ::build0(int i)//递归建树 { BTreeNode *p;int l,r;if((i <=n)&&(a[i-1]!=)){ p=new BTreeNode ;p->data=a[i-1];l=2*i;r=2*i+1;p->lchild=build0(l);p->rchild=build0(r);return(p);} else return(NULL);}

template BTree ::BTree(T a[],int n){ this->a=a;this->n=n;root=build0(1);cout <<“递归建树成功!”<

//***********************遍历******************************* template void BTree ::preorder(void visit(BTreeNode *p))//递归前序遍历 { preorder(root,visit);cout < void BTree ::preorder(BTreeNode * p,void visit(BTreeNode *p)){ if(p!=NULL){ visit(p);preorder(p->lchild,visit);preorder(p->rchild,visit);} } template void BTree ::inorder(void visit(BTreeNode *p)){ inorder(root,visit);cout < void BTree ::inorder(BTreeNode * p,void visit(BTreeNode *p)){ if(p!=NULL){ inorder(p->lchild,visit);visit(p);inorder(p->rchild,visit);} } template void BTree ::postorder(void visit(BTreeNode *p))//递归后序遍历 { postorder(root,visit);cout < void BTree ::postorder(BTreeNode * p,void visit(BTreeNode *p)){ if(p!=NULL){ postorder(p->lchild,visit);postorder(p->rchild,visit);visit(p);} } void main(){ char *str=“abcd e”;cout<s(str,6);cout <>choice;cout <

{cout <<“递归先序遍历二叉树:”;s.preorder(s.fun);cout <

答:经常忘记对头结点的定义,以至于程序出错,经定义头结点,使程序正常运行。

b)程序运行的结果如何?

上一篇:路边的野花小学作文下一篇:浅谈企业内部控制