您当前的位置:首页 > 问答 > 内容

二叉树的遍历实验报告(1用递归实现二叉树的先序、中序、后序三种遍历2哈夫曼)

本文目录

  • 1用递归实现二叉树的先序、中序、后序三种遍历2哈夫曼
  • 数据结构实验报告--求二叉树结点求解的实验报告,急
  • C语言 树的生成和遍历
  • 求遍历二叉树实验报告一份
  • 用VB编写 二叉树的建立与遍历、二叉树的排序
  • 数据结构实验报告: 查找 排序 图的存储与遍历 二叉树的存储与遍历

1用递归实现二叉树的先序、中序、后序三种遍历2哈夫曼

在吗?我给你。另外我有自己的实验报告。//里面有递归遍历,有迭代遍历。可以写文件,可以压缩编码。可以读文件。//你不需要什么功能的话就删去相应的函数就行了。//希望加分。#includeiostream

数据结构实验报告--求二叉树结点求解的实验报告,急

#include 《stdio.h》//头文件#include 《stdlib.h》#include 《malloc.h》typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild;} BiTNode,*BiTree;//定义结点类型typedef struct QNode{ BiTNode data; struct QNode *next; } //定义队列的节点类型QNode,*QueuePtr;typedef struct{ QueuePtr front; QueuePtr rear; }LinkQueue;//队列void InitQueue(LinkQueue *Q)//创建队列{ Q-》front=Q-》rear=(QueuePtr)malloc(sizeof(QNode)); Q-》front-》next=NULL;}void EnQueue(LinkQueue *Q,BiTNode e)//将元素入队{ QueuePtr p; p=(QueuePtr)malloc(sizeof(QNode));//为结点开辟空间 p-》data=e; p-》next=NULL; Q-》rear-》next=p; Q-》rear=p;}BiTNode DeQueue(LinkQueue *Q)//将元素出列并返回元素的值。{ BiTNode e;QueuePtr p; p=Q-》front-》next; e=p-》data; Q-》front-》next=p-》next; if(Q-》rear==p) Q-》rear=Q-》front; free(p);//释放节点 return (e);}int QueueEmpty(LinkQueue *Q)//判断队列是否为空{ if(Q-》front==Q-》rear ) return 1; else return 0;}BiTree CreateBiTree()//创建树{ char p;BiTree T; scanf(“%c“,&p); if(p==’ ’) T=NULL; else { T=(BiTNode *)malloc(sizeof(BiTNode));//为结点开辟空间 T-》data=p; T-》lchild=CreateBiTree(); T-》rchild=CreateBiTree(); } return (T);}void PreOrder(BiTree T)//先序{ if(T!=NULL) { printf(“%c“,T-》data); PreOrder(T-》lchild); PreOrder(T-》rchild); }}void InOrder(BiTree T)//中序{ if(T!=NULL) { InOrder(T-》lchild); printf(“%c“,T-》data); InOrder(T-》rchild); }}void PostOrder(BiTree T)//后序{ if(T!=NULL) { PostOrder(T-》lchild); PostOrder(T-》rchild); printf(“%c“,T-》data); }}void LevelOrder(BiTree T)//层次遍历 { LinkQueue Q; BiTNode p; InitQueue(&Q); EnQueue(&Q,*T); while(!QueueEmpty(&Q)) { p = DeQueue(&Q); printf(“%c“,p.data); if(p.lchild!=NULL) EnQueue(&Q,*(p.lchild)); if(p.rchild!=NULL) EnQueue(&Q,*(p.rchild)); }}int Depth(BiTree T)/* 深度 */ { int num1,num2; if(T==NULL) return(0); num1=Depth(T-》lchild); num2=Depth(T-》rchild); if(num1》num2) return(num1+1); else return(num2+1); }void main()//主函数{ BiTree Ta;int num; Ta=CreateBiTree(); printf(“先序遍历:“); printf(“\n“); PreOrder(Ta); printf(“\n“); printf(“中序遍历:“); printf(“\n“); InOrder(Ta); printf(“\n“); printf(“后序遍历:“); printf(“\n“); PostOrder(Ta); printf(“\n“); printf(“层次遍历:“); printf(“\n“); LevelOrder(Ta); printf(“\n“); num=Depth(Ta); printf(“深度为:%d“,num); }为你量身定做的,开始要创建树,如果不会输入可以问我哦。

C语言 树的生成和遍历

#include //头文件#include typedef struct BiTNode{char data;struct BiTNode *lchild,*rchild;} BiTNode,*BiTree;//定义结点类型BiTree CreateBiTree()//创建树{char p;BiTree T;scanf(“%c“,&p);if(p==’ ’)T=NULL;else{T=(BiTNode *)malloc(sizeof(BiTNode));//为结点开辟空间T-》data=p;T-》lchild=CreateBiTree();T-》rchild=CreateBiTree();}return (T);}void PreOrder(BiTree T)//先序{if(T!=NULL){printf(“%c“,T-》data);PreOrder(T-》lchild);PreOrder(T-》rchild);}}void InOrder(BiTree T)//中序{if(T!=NULL){InOrder(T-》lchild);printf(“%c“,T-》data);InOrder(T-》rchild);}}void PostOrder(BiTree T)//后序{if(T!=NULL){PostOrder(T-》lchild);PostOrder(T-》rchild);printf(“%c“,T-》data);}}void main()//主函数{BiTree Ta;Ta=CreateBiTree();printf(“先序遍历:“);printf(“\n“);PreOrder(Ta);printf(“\n“);printf(“中序遍历:“);printf(“\n“);InOrder(Ta);printf(“\n“);printf(“后序遍历:“);printf(“\n“);PostOrder(Ta);} 给你个简单的例子:AB***其中*代表空格复杂点的例子ABC**DE*f**g***其中*代表空格

求遍历二叉树实验报告一份

实验报告实验名称:遍历二叉树实验目的:掌握二叉树链式存储的类型定义及实现。掌握二叉树链式存储的各类基本运算方法掌握二叉树用不同方法标识所对应的不同输入形式。掌握二叉树中各个重要性质在解决实际问题中的应用。掌握二叉树的分析方法,解决方法,从而提高实际编程能力及程序调试能力等。实验要求:建立一个二叉树并对其进行遍历实验内容1、创建二叉树2、用递归方法实现二叉树的各种遍历实验仪器与设备计算机、VC++6.0程序实验原理建立一个二叉树,利用递归的方法实现对该二叉树的遍历,并输出遍历结果。实验程序及结果#include“stdlib.h“#include“stdio.h“#include“malloc.h“#include “stdafx.h“#include 《stdio.h》#include 《malloc.h》typedef char DataType; typedef struct Node {DataType data;struct Node *LChild;struct Node *RChild;}BiTNode,*BiTree; /*声明二叉树的二叉链表结点的结构*/void CreateBiTree(BiTree *bt) /*利用“扩展先序遍历序列”创建二叉链表*/{char ch;ch=getchar();if(ch==’.’) *bt=NULL;else{*bt=(BiTree)malloc(sizeof(BiTNode)); /*申请空间*/(*bt)-》data=ch;CreateBiTree(&((*bt)-》LChild)); CreateBiTree(&((*bt)-》RChild));}return;}/*采用递归算法,如果是空树,返回0;如果只有一个结点,返回1;否则为左右子树的叶子结点数之和*/int leaf(BiTree bt){int LeafCount;if(bt==NULL)LeafCount =0;else if((bt-》LChild==NULL)&&(bt-》RChild==NULL))LeafCount=1;elseLeafCount=leaf(bt-》LChild)+leaf(bt-》RChild);return LeafCount;}void PrintTree(BiTree bt,int nLayer) /*按竖向树状打印二叉树*/{if(bt==NULL)return;PrintTree(bt-》RChild,nLayer+1);for(int i=0;i《nLayer;i++)printf(“ “);printf(“%c\n“,bt-》data);PrintTree(bt-》LChild,nLayer+1);}void main() /*调用主函数连接其他函数,构成完整的程序*/{ BiTree bt; printf(“请输入二叉树的序列: \n“); CreateBiTree(&bt); printf(“该二叉树的叶子结点个数为: %d\n“,leaf(bt)); printf(“该二叉树的形状为:\n“); int nLayer=0; PrintTree(bt,nLayer);}请输入数据:AB.DF..G..C.E.H..结果:实验总结:通过学习数据结构,发现数据结构包括线性结构、树形结构、图状结构或网状结构。线性结构包括线性表、栈、队列、串、数组、广义表等,栈和队列是操作受限的线性表,串的数据对象约束为字符集,数组和广义表是对线性表的扩展:表中的数据元素本身也是一个数据结构。除了线性表以外,栈是重点,因为栈和递归紧密相连,递归是程序设计中很重要的一种工具。树状结构中的重点自然是二叉树和哈弗曼树了。对于二叉树的很多操作都是基于对二叉树的遍历,掌握了如何遍历,很多问题也就迎刃而解了,比如对二叉树结点的查找访问、统计二叉树中叶子结点的数目、求二叉树的深度等。哈弗曼编码也有着很广泛的应用。对于图状结构,主要学习图的存储结构及图的遍历。学习算法的目的是利用算法解决实际问题。会写课本上已有的算法之后,可以借其思想进行扩展,逐步提高编程能力。比如数值转换,括号匹配的检验,检验平衡二叉树等。

用VB编写 二叉树的建立与遍历、二叉树的排序

实验四 二叉树的建立和遍历一、实验名称 二叉树的建立和遍历。二、实验目的掌握二叉树的二叉链表存储结构及二叉树的建立方法。熟悉二叉树的遍历方法。三、实验内容(1)根据先序遍历和中序遍历的序列,建立一棵二叉树(二叉树用二叉链表存储)。(2)分别以先序和中序遍历二叉树,将假设结果与给定的先序和中序遍历序列进行比较,以证明建立二叉树的正确性。(3)给出后序遍历序列。四、实验步骤(1)编写一个过程,将给出的遍历序列读入一个数组;(2)编写一个过程,根据先序和中序遍历的序列建立一棵二叉树;(3)编写一个过程,进行先序遍历,并将结果存入一个数组。(4)编写一个过程,进行中序遍历,并将结果存入一个数组。(5) 编写一个函数,用以证明建立的二叉树的正确性。(6)编写一个过程,进行后序遍历,打印后序遍历结果(前面函数为真时);(7)调试程序:先序遍历序列为:ABDECF;中序遍历序列为:DBEACF;(8)将实验心得写在程序后面,作为实验报告进行文档备份。五、实验数据处理将原程序和实验结果存入计算机室服务器或软盘后,交由指导老师或有关实验人员保存。实验五 二叉树的排序一、实验名称 二叉树的排序。二、实验目的通过该实验,进一步熟悉二叉树的建立方法,掌握二叉排序树的建立和使用。三、实验内容(1)根据中序遍历,建立一棵二叉排序树用二叉链表存储;(2)给出先序遍历和后序遍历序列。四、实验步骤(1)编写一个过程,将给定的待排序数据读入一个数组;(2)编写一个过程,建立二叉排序树;(3)编写一个函数,用中序遍历以证明二叉排序树的正确性;(4)编写一个过程,进行先序遍历,并打印遍历结果(第3步必须确保正确);(5)编写一个过程,进行后序遍历,并打印遍历结果(第3步必须确保正确);(6)调试程序; 用以下数据调试程序:(58、48、77、42、64) (7)将实验心得写在程序后面,作为实验报告进行文档备份。五、实验数据处理将原程序和实验结果存入计算机室服务器或软盘后,交由指导老师或有关实验人员保存。jiuzheyang ban

数据结构实验报告: 查找 排序 图的存储与遍历 二叉树的存储与遍历

1、建立一个单链表,并从屏幕显示单链表元素列表。 2、从键盘输入一个数,查找在以上创建的单链表中是否存在该数;如果存在,显示它的位置;如果不存在,给出相应提示。 3、在上述的单链表中的指定位置插入指定的元素 4、删除上述单链表中指定位置的元素。 源程序:头文件 #include《iostream.h》 #include《malloc.h》 typedef char ElemType; typedef int Status; #define OK 1 #define ERROR 0 typedef struct LNode{ ElemType data; LNode *next; }LNode,*LinkList; void about(){ //版本信息 cout《《“单链表的操作“ } void showmenu(){ //功能列表 cout《《endl 《《“ **********功能**********“《《endl 《《“ * 1.输出单链表的全部数据*“《《endl 《《“ * 2.查找链表元素 *“《《endl 《《“ * 3.链表插入元素 *“《《endl 《《“ * 4.链表删除元素 *“《《endl 《《“ * 5.结束 *“《《endl 《《“ ************************“《《endl 《《“请输入所需功能: “; } //*******查看输入的全部数据********* void PrintList(LinkList L){ LinkList p; cout《《endl《《“你输入的数据为: “; p=L-》next; //从头结点开始扫描 while(p){ //顺指针向后扫描,直到p-》next为NULL或i=j为止 cout《《p-》data; p=p-》next; } cout《《endl; } //逆序输入 n 个数据元素,建立带头结点的单链表 void CreateList_L(LinkList &L, int n) { int i; LinkList p; L = new LNode; L-》next = NULL; // 先建立一个带头结点的单链表 cout《《“逆序输入 n 个数据元素,建立带头结点的单链表“《《endl; for (i = n; i 》 0; --i) { p = new LNode; cin》》p-》data; // 输入元素值 p-》next = L-》next; L-》next = p; // 插入 } } // L是带头结点的链表的头指针,以 e 返回第 i 个元素 Status GetElem_L(LinkList L, int i, ElemType &e) { int j; LinkList p; p = L-》next; j = 1; // p指向第一个结点,j为计数器 while (p && j《i) // 顺指针向后查找,直到 p 指向第 i 个元素或 p 为空 if ( !p || j》i ) return ERROR; // 第 i 个元素不存在 e = p-》data; // 取得第 i 个元素 return OK; } // 本算法在链表中第i 个结点之前插入新的元素 e Status ListInsert_L(LinkList L, int i, ElemType e) { int j; LinkList p,s; p = L; j = 0; while (p && j 《 i-1) // 寻找第 i-1 个结点 if (!p || j 》 i-1) return ERROR; // i 大于表长或者小于1 s = new LNode; // 生成新结点 if ( s == NULL) return ERROR; s-》data = e; s-》next = p-》next; p-》next = s; // 插入 return OK; } Status ListDelete_L(LinkList L, int i, ElemType &e) {LinkList p,q; int j; p = L; j = 0; while (p-》next && j 《 i-1) // 寻找第 i 个结点,并令 p 指向其前趋 if (!(p-》next) || j 》 i-1) return ERROR; // 删除位置不合理 q = p-》next; p-》next = q-》next; // 删除并释放结点 e = q-》data; free(q); return OK; } #include“LinkList.h“ void main() {LinkList L; int n,choice,i; ElemType e; about(); cout《《“请输入链表中元素的个数“; cin》》n; CreateList_L(L, n); showmenu(); //功能列表 cin》》choice; while(choice!=5) { //输入时候退出程序 switch(choice){ case 1:PrintList(L);break; //1.查看输入的全部数据 case 2:{ cout《《“输入你要查找的元素的位置: “; cin》》i;GetElem_L(L, i, e); cout《《“第“《《i《《“个元素的值是“《《e《《endl; break;} //2.查找链表元素 case 3: {cout《《“请输入你要插入元素的位置i: “; cin》》i; cout《《endl《《“请输入你要插入元素的值: “; cin》》e; ListInsert_L(L, i,e); break;} //3.链表插入元素 case 4: {cout《《“请输入你要删除元素的位置“; cin》》i; ListDelete_L(L, i, e) ; break;} //4.链表删除元素 default:cout《《“输入错误,请输入-5,输入重显示功能表^_^ “《《endl; } cout《《endl《《“输入功能序号:“; cin》》choice; } }


声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,谢谢。

上一篇: 怎样刺激让胎儿早点生,如何刺激孕妇早点生产(如何实现母乳喂养)

下一篇: appliances(appliance和equipment的区别)



猜你感兴趣

推荐阅读

网站内容来自网络,如有侵权请联系我们,立即删除! | 软文发布 | 粤ICP备2021106084号