第九周项目一__二叉树算法库

  1. /* 
  2. 烟台大学计算机学院 
  3.  
  4. 文件名称:main.cpp body.cpp head.cpp 
  5.  
  6. 作者:刘浩 
  7.  
  8. 问题描述:第九周项目一 
  9. 二叉树的链式存储算法库采用程序的多文件组织形式 
  10. */  
  11. #include <stdio.h>  
  12. #include "head.h"  
  13. int main()  
  14. {  
  15.     BTNode *b,*p,*lp,*rp;;  
  16.     printf("  (1)创建二叉树:");  
  17.     CreateBTNode(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))");  
  18.     printf("\n");  
  19.     printf("  (2)输出二叉树:");  
  20.     DispBTNode(b);  
  21.     printf("\n");  
  22.     printf("  (3)查找H节点:");  
  23.     p=FindNode(b,'H');  
  24.     if (p!=NULL)  
  25.     {  
  26.         lp=LchildNode(p);  
  27.         if (lp!=NULL)  
  28.             printf("左孩子为%c ",lp->data);  
  29.         else  
  30.             printf("无左孩子 ");  
  31.         rp=RchildNode(p);  
  32.         if (rp!=NULL)  
  33.             printf("右孩子为%c",rp->data);  
  34.         else  
  35.             printf("无右孩子 ");  
  36.     }  
  37.     else  
  38.         printf(" 未找到!");  
  39.     printf("\n");  
  40.     printf("  (4)二叉树b的深度:%d\n",BTNodeDepth(b));  
  41.     printf("  (5)释放二叉树b\n");  
  42.     DestroyBTNode(b);  
  43.     return 0;  
  44. }  
[cpp]  view plain  copy
  1. //头文件  
  2.   
  3.   
  4. #ifndef HEAD_H_INCLUDED  
  5. #define HEAD_H_INCLUDED  
  6. #define MaxSize 100  
  7. typedef char ElemType;  
  8. typedef struct node  
  9. {  
  10.     ElemType data;  
  11.     struct node *lchild;  
  12.     struct node *rchild;  
  13. }BTNode;  
  14. void CreateBTNode(BTNode *&b,char *str);        //由str串创建二叉链  
  15. BTNode *FindNode(BTNode *b,ElemType x);     //返回data域为x的节点指针  
  16. BTNode *LchildNode(BTNode *p);  //返回*p节点的左孩子节点指针  
  17. BTNode *RchildNode(BTNode *p);  //返回*p节点的右孩子节点指针  
  18. int BTNodeDepth(BTNode *b); //求二叉树b的深度  
  19. void DispBTNode(BTNode *b); //以括号表示法输出二叉树  
  20. void DestroyBTNode(BTNode *&b);  //销毁二叉树  
  21. #endif // HEAD_H_INCLUDED  
[cpp]  view plain  copy
  1. //body  
  2.   
  3.   
  4. #include "stdio.h"  
  5. #include <malloc.h>  
  6. #include "head.h"  
  7.   
  8. void CreateBTNode(BTNode *&b,char *str)     //由str串创建二叉链  
  9. {  
  10.     BTNode *St[MaxSize],*p=NULL;  
  11.     int top=-1,k,j=0;  
  12.     char ch;  
  13.     b=NULL;             //建立的二叉树初始时为空  
  14.     ch=str[j];  
  15.     while (ch!='\0')    //str未扫描完时循环  
  16.     {  
  17.         switch(ch)  
  18.         {  
  19.         case '(':  
  20.             top++;  
  21.             St[top]=p;  
  22.             k=1;  
  23.             break;      //为左节点  
  24.         case ')':  
  25.             top--;  
  26.             break;  
  27.         case ',':  
  28.             k=2;  
  29.             break;                          //为右节点  
  30.         default:  
  31.             p=(BTNode *)malloc(sizeof(BTNode));  
  32.             p->data=ch;  
  33.             p->lchild=p->rchild=NULL;  
  34.             if (b==NULL)                    //p指向二叉树的根节点  
  35.                 b=p;  
  36.             else                            //已建立二叉树根节点  
  37.             {  
  38.                 switch(k)  
  39.                 {  
  40.                 case 1:  
  41.                     St[top]->lchild=p;  
  42.                     break;  
  43.                 case 2:  
  44.                     St[top]->rchild=p;  
  45.                     break;  
  46.                 }  
  47.             }  
  48.         }  
  49.         j++;  
  50.         ch=str[j];  
  51.     }  
  52. }  
  53.   
  54. BTNode *FindNode(BTNode *b,ElemType x)  //返回data域为x的节点指针  
  55. {  
  56.     BTNode *p;  
  57.     if (b==NULL)  
  58.         return NULL;  
  59.     else if (b->data==x)  
  60.         return b;           //直接返回b作为节点指针  
  61.         else  
  62.         {  
  63.             p=FindNode(b->lchild,x);  
  64.             if (p!=NULL)  
  65.                 return p;  
  66.             else  
  67.                 return FindNode(b->rchild,x);  
  68.         }  
  69.   
  70. }  
  71. BTNode *LchildNode(BTNode *p)   //返回*p节点的左孩子节点指针  
  72. {  
  73.     return p->lchild;  
  74. }  
  75. BTNode *RchildNode(BTNode *p)   //返回*p节点的右孩子节点指针  
  76. {  
  77.     return p->rchild;  
  78. }  
  79. int BTNodeDepth(BTNode *b)  //求二叉树b的深度  
  80. {  
  81.     int lchilddep,rchilddep;  
  82.     if (b==NULL)  
  83.         return(0);                          //空树的高度为0  
  84.     else  
  85.     {  
  86.         lchilddep=BTNodeDepth(b->lchild);   //求左子树的高度为lchilddep  
  87.         rchilddep=BTNodeDepth(b->rchild);   //求右子树的高度为rchilddep  
  88.         return (lchilddep>rchilddep)? (lchilddep+1):(rchilddep+1);  
  89.     }  
  90. }  
  91. void DispBTNode(BTNode *b)  //以括号表示法输出二叉树  
  92. {  
  93.     if (b!=NULL)  
  94.     {  
  95.         printf("%c",b->data);  
  96.         if (b->lchild!=NULL || b->rchild!=NULL)  
  97.         {  
  98.             printf("(");  
  99.             DispBTNode(b->lchild);  
  100.             if (b->rchild!=NULL) printf(",");  
  101.             DispBTNode(b->rchild);  
  102.             printf(")");  
  103.         }  
  104.     }  
  105. }  
  106. void DestroyBTNode(BTNode *&b)   //销毁二叉树  
  107. {  
  108.     if (b!=NULL)  
  109.     {  
  110.         DestroyBTNode(b->lchild);  
  111.         DestroyBTNode(b->rchild);  
  112.         free(b);  
  113.     }  
  114. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据操作、用户权限管理等关键技术。 数据设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据设计文件。这些文件通常包括数据结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据操作、用户权限管理等关键技术。 数据设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据设计文件。这些文件通常包括数据结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
08-10
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据操作、用户权限管理等关键技术。 数据设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据设计文件。这些文件通常包括数据结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值