收藏 分销(赏)

数据结构树和二叉树实验报告.doc

上传人:天**** 文档编号:4347238 上传时间:2024-09-09 格式:DOC 页数:11 大小:40.50KB
下载 相关 举报
数据结构树和二叉树实验报告.doc_第1页
第1页 / 共11页
数据结构树和二叉树实验报告.doc_第2页
第2页 / 共11页
点击查看更多>>
资源描述
《数据结构》课程实验报告 实验名称 树与二叉树 实验序号 5 实验日期 姓 名 院系 班  级 学  号 专  业 指导教师 成 绩 教师评语 一、实验目得与要求 (1)掌握树得相关概念,包括树、结点得度、树得度、分支结点、叶子结点、儿子结点、双亲结点、树得深度、森林等定义。 (2)掌握树得表示,包括树形表示法、文氏图表示法、凹入表示法与括号表示法等。 (3)掌握二叉树得概念,包括二叉树、满二叉树与完全二叉树得定义。 (4)掌握二叉树得性质。 (5)重点掌握二叉树得存储结构,包括二叉树顺序存储结构与链式存储结构。 (6)重点掌握二叉树得基本运算与各种遍历算法得实现。 (7)掌握线索二叉树得概念与相关算法得实现。 (8)掌握哈夫曼树得定义、哈夫曼树得构造过程与哈夫曼编码产生方法。 (9)掌握并查集得相关概念与算法。 (10)灵活掌握运用二叉树这种数据结构解决一些综合应用问题。 二、实验项目摘要 1.编写一程序,实现二叉树得各种基本运算,并在此基础上设计一个主程序完成如下功能: (1) 输出二叉树b; (2) 输出H结点得左、右孩子结点值; (3) 输出二叉树b得深度; (4) 输出二叉树b得宽度; (5) 输出二叉树b得结点个数; (6) 输出二叉树b得叶子结点个数。 2.编写一程序,实现二叉树得先序遍历、中序遍历与后序遍历得各种递归与非递归算法,以及层次遍历得算法。 三、实验预习内容 二叉树存储结构,二叉树基本运算(创建二叉树、寻找结点、找孩子结点、求高度、输出二叉树) 三、实验结果与分析   7-1 #include <stdio、h> #include <malloc、h> #define MaxSize 100 typedef char ElemType; typedef struct node { ﻩElemType data; ﻩ struct node *lchild; ﻩstruct node *rchild;ﻩ } BTNode; void CreateBTNode(BTNode *&b,char *str) { ﻩBTNode *St[MaxSize],*p=NULL; ﻩint top=-1,k,j=0;  char ch; b=NULL;ﻩﻩ ﻩ ch=str[j]; while (ch!='\0') ﻩ{   switch(ch) { ﻩcase '(':top++;St[top]=p;k=1; break; ﻩ ﻩﻩcase ')':top--;break; ﻩﻩcase ',':k=2; break;         ﻩdefault:p=(BTNode *)malloc(sizeof(BTNode)); ﻩ p->data=ch;p->lchild=p->rchild=NULL;     if (b==NULL)            ﻩ ﻩ b=p; ﻩ ﻩelse ﻩ ﻩ ﻩﻩ ﻩ ﻩ{ ﻩﻩﻩ ﻩﻩswitch(k) ﻩ ﻩﻩﻩﻩ{ ﻩ ﻩ ﻩ case 1:St[top]->lchild=p;break; ﻩﻩﻩ case 2:St[top]->rchild=p;break; ﻩﻩ ﻩ } ﻩﻩﻩ } ﻩﻩ} j++; ﻩ ch=str[j]; ﻩ} } BTNode *FindNode(BTNode *b,ElemType x) { ﻩBTNode *p; ﻩif (b==NULL) ﻩ    return NULL; else if (b->data==x) ﻩ return b; else ﻩ{ﻩ ﻩ p=FindNode(b->lchild,x); ﻩﻩif (p!=NULL) ﻩ ﻩreturn p; ﻩ else ﻩﻩreturn FindNode(b->rchild,x); } } BTNode *LchildNode(BTNode *p) { return p->lchild; } BTNode *RchildNode(BTNode *p) { return p->rchild; } int BTNodeDepth(BTNode *b) { int lchilddep,rchilddep; if (b==NULL)  ﻩ return(0); ﻩ ﻩﻩﻩ    else ﻩ{ ﻩlchilddep=BTNodeDepth(b->lchild);ﻩ ﻩ  ﻩrchilddep=BTNodeDepth(b->rchild);ﻩ ﻩﻩreturn (lchilddep>rchilddep)? (lchilddep+1):(rchilddep+1);  ﻩ} } void DispBTNode(BTNode *b) { ﻩif (b!=NULL) { ﻩ printf("%c",b->data); ﻩif (b->lchild!=NULL || b->rchild!=NULL) ﻩ { ﻩprintf("("); ﻩﻩ DispBTNode(b->lchild); ﻩﻩ if (b->rchild!=NULL) printf(","); ﻩﻩﻩDispBTNode(b->rchild); ﻩ printf(")"); ﻩﻩ} } } int BTWidth(BTNode *b) { struct { ﻩﻩint lno; ﻩﻩBTNode *p;ﻩ } Qu[MaxSize];ﻩ int front,rear; ﻩ ﻩ ﻩ ﻩint lnum,max,i,n; ﻩfront=rear=0;ﻩﻩﻩ ﻩﻩ if (b!=NULL) { rear++;ﻩ ﻩQu[rear]、p=b; ﻩﻩ ﻩ ﻩ Qu[rear]、lno=1;ﻩﻩ ﻩﻩ while (rear!=front) ﻩ { ﻩﻩﻩfront++; ﻩﻩ b=Qu[front]、p; ﻩﻩ ﻩﻩ lnum=Qu[front]、lno; if (b->lchild!=NULL)ﻩﻩ ﻩﻩ{ ﻩﻩ rear++; ﻩ Qu[rear]、p=b->lchild; ﻩﻩﻩQu[rear]、lno=lnum+1; ﻩﻩ } ﻩif (b->rchild!=NULL) ﻩﻩ{ ﻩﻩ rear++; ﻩ ﻩﻩQu[rear]、p=b->rchild; ﻩﻩﻩﻩQu[rear]、lno=lnum+1; ﻩﻩ } } ﻩmax=0;lnum=1;i=1; while (i<=rear) ﻩ { ﻩ ﻩn=0; ﻩwhile (i<=rear && Qu[i]、lno==lnum) { n++;i++; ﻩﻩﻩ} ﻩﻩ lnum=Qu[i]、lno; ﻩ ﻩif (n>max) max=n; ﻩﻩ} return max; ﻩ} else ﻩ return 0; } int Nodes(BTNode *b) { ﻩint num1,num2;    if (b==NULL) ﻩ return 0;   else if (b->lchild==NULL && b->rchild==NULL) return 1;  else   {  num1=Nodes(b->lchild);       num2=Nodes(b->rchild);      return (num1+num2+1); } } int LeafNodes(BTNode *b) { ﻩint num1,num2;   if (b==NULL)  return 0; else if (b->lchild==NULL && b->rchild==NULL) return 1;  else   {   num1=LeafNodes(b->lchild);   num2=LeafNodes(b->rchild);       return (num1+num2); } } void main() { BTNode *b,*p,*lp,*rp;; CreateBTNode(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))"); ﻩprintf("输出二叉树:");DispBTNode(b);printf("\n"); ﻩprintf("'H'结点:"); p=FindNode(b,'H'); if (p!=NULL) ﻩ{ ﻩ lp=LchildNode(p); ﻩ if (lp!=NULL)  ﻩﻩprintf("左孩子为%c ",lp->data); ﻩ else printf("无左孩子 "); rp=RchildNode(p); ﻩ if (rp!=NULL)  ﻩprintf("右孩子为%c",rp->data); ﻩﻩelse printf("无右孩子 "); ﻩ} printf("\n"); ﻩprintf("二叉树b得深度:%d\n",BTNodeDepth(b)); printf("二叉树b得宽度:%d\n",BTWidth(b)); printf("二叉树b得结点个数:%d\n",Nodes(b)); printf("二叉树b得叶子结点个数:%d\n",LeafNodes(b)); } 7-2 #include <stdio、h> #include <malloc、h> #define MaxSize 100 typedef char ElemType; typedef struct node { ﻩElemType data; struct node *lchild; ﻩ ﻩstruct node *rchild; } BTNode; void CreateBTNode(BTNode *&b,char *str) { ﻩBTNode *St[MaxSize],*p=NULL; ﻩint top=-1,k,j=0;  ﻩchar ch; ﻩb=NULL;ﻩ ch=str[j]; ﻩwhile (ch!='\0') ﻩ{    ﻩ  switch(ch) ﻩﻩ{ ﻩ case '(':top++;St[top]=p;k=1; break; ﻩ ﻩ case ')':top--;break; case ',':k=2; break;       ﻩ default:p=(BTNode *)malloc(sizeof(BTNode)); ﻩ ﻩp->data=ch;p->lchild=p->rchild=NULL; ﻩ     ﻩif (b==NULL)         ﻩﻩ ﻩ b=p; ﻩﻩ else  ﻩ ﻩﻩ ﻩﻩﻩﻩﻩ{ﻩ ﻩ switch(k) ﻩ ﻩﻩﻩ{ ﻩﻩ case 1:St[top]->lchild=p;break; ﻩﻩ ﻩﻩcase 2:St[top]->rchild=p;break; ﻩﻩﻩ ﻩﻩ} ﻩ ﻩﻩ} ﻩ } j++; ﻩch=str[j]; } } void DispBTNode(BTNode *b) { ﻩif (b!=NULL) ﻩ{ ﻩﻩprintf("%c",b->data); ﻩ if (b->lchild!=NULL || b->rchild!=NULL) ﻩ { ﻩ printf("("); ﻩDispBTNode(b->lchild); if (b->rchild!=NULL) printf(","); ﻩﻩDispBTNode(b->rchild); ﻩﻩprintf(")"); ﻩ } ﻩ} } void PreOrder(BTNode *b) { ﻩif (b!=NULL) {ﻩ ﻩprintf("%c ",b->data); PreOrder(b->lchild); ﻩﻩPreOrder(b->rchild); } } void PreOrder1(BTNode *b) { BTNode *St[MaxSize],*p;   int top=-1;  if (b!=NULL)  {       top++; ﻩﻩﻩ       St[top]=b;       while (top>-1)    {      p=St[top];ﻩ        top--;    printf("%c ",p->data);       if (p->rchild!=NULL) ﻩﻩﻩ{         top++;       St[top]=p->rchild; ﻩ ﻩ}            if (p->lchild!=NULL) ﻩ {            top++;         St[top]=p->lchild; ﻩ ﻩ} ﻩ } ﻩprintf("\n"); ﻩ} } void InOrder(BTNode *b) { if (b!=NULL) { ﻩﻩInOrder(b->lchild); ﻩﻩprintf("%c ",b->data); ﻩ InOrder(b->rchild);ﻩ } } void InOrder1(BTNode *b) { ﻩBTNode *St[MaxSize],*p; int top=-1; if (b!=NULL) ﻩ{ ﻩ p=b; ﻩﻩwhile (top>-1 || p!=NULL) ﻩ { ﻩwhile (p!=NULL) ﻩﻩ{ ﻩ ﻩﻩtop++; St[top]=p; ﻩﻩp=p->lchild; ﻩ } ﻩﻩ if (top>-1) ﻩ { ﻩﻩﻩﻩp=St[top]; ﻩtop--; ﻩprintf("%c ",p->data); ﻩ ﻩﻩp=p->rchild; ﻩﻩ} ﻩ } ﻩprintf("\n"); } } void PostOrder(BTNode *b) { ﻩif (b!=NULL) {ﻩ ﻩPostOrder(b->lchild); ﻩ PostOrder(b->rchild); ﻩ printf("%c ",b->data); ﻩ ﻩ ﻩ} } void PostOrder1(BTNode *b) { BTNode *St[MaxSize]; BTNode *p; ﻩint flag,top=-1; ﻩ ﻩ ﻩif (b!=NULL) ﻩ{ ﻩ do ﻩ{ ﻩﻩﻩwhile (b!=NULL) ﻩ { ﻩtop++; ﻩﻩﻩﻩSt[top]=b; ﻩ b=b->lchild; } ﻩ p=NULL; ﻩﻩﻩ ﻩ flag=1;ﻩ ﻩ ﻩﻩ ﻩﻩwhile (top!=-1 && flag) ﻩ ﻩ{ ﻩb=St[top];ﻩﻩﻩﻩﻩ ﻩ ﻩif (b->rchild==p) ﻩ ﻩ{ ﻩﻩ ﻩ printf("%c ",b->data); ﻩ ﻩﻩtop--; ﻩ ﻩ p=b; ﻩ} ﻩ ﻩ else ﻩﻩ { ﻩ b=b->rchild;ﻩ ﻩﻩ ﻩﻩflag=0; ﻩﻩ ﻩﻩ } ﻩﻩ } ﻩﻩ} while (top!=-1); ﻩﻩprintf("\n"); } } void LevelOrder(BTNode *b) {   BTNode *p; BTNode *qu[MaxSize];ﻩﻩﻩ ﻩint front,rear; ﻩﻩﻩﻩ ﻩfront=rear=-1;ﻩ rear++; ﻩ ﻩﻩﻩ qu[rear]=b;   while (front!=rear)ﻩﻩ   {  front=(front+1)%MaxSize; ﻩp=qu[front]; ﻩ printf("%c ",p->data);ﻩ ﻩﻩﻩ ﻩif (p->lchild!=NULL) ﻩﻩ{ rear=(rear+1)%MaxSize; ﻩﻩ qu[rear]=p->lchild; ﻩﻩ} if (p->rchild!=NULL) ﻩ{ rear=(rear+1)%MaxSize; ﻩﻩqu[rear]=p->rchild; } ﻩ} } void main() { ﻩBTNode *b; ﻩCreateBTNode(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))"); printf("二叉树b:");DispBTNode(b);printf("\n"); ﻩprintf("先序遍历序列:\n"); printf("递归算法:");PreOrder(b);printf("\n"); ﻩprintf("非递归算法:");PreOrder1(b); ﻩprintf("中序遍历序列:\n"); ﻩprintf("递归算法:");InOrder(b);printf("\n"); printf("非递归算法:");InOrder1(b); ﻩprintf("后序遍历序列:\n"); printf("递归算法:");PostOrder(b);printf("\n"); printf("非递归算法:");PostOrder1(b); ﻩprintf("层次遍历序列:");LevelOrder(b);printf("\n"); } 注:空间不够,可以增加页码。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服