第九周项目三

来源:互联网 发布:华为交换机 允许mac表 编辑:程序博客网 时间:2024/06/05 18:53
  1. /*  
  2. 烟台大学计算机学院  
  3.   
  4. 文件名称:3.cpp  
  5.   
  6. 作者:刘照京  
  7.   
  8. 完成日期:2017年11月16日  
  9.   
  10. 问题描述:假设二叉树采用二叉链存储结构存储,分别实现以下算法,并在程序中完成测试:  
  11.   (1)计算二叉树节点个数;  
  12.   (2)输出所有叶子节点;  
  13.   (3)求二叉树b的叶子节点个数;  
  14.   (4)设计一个算法Level(b,x,h),返回二叉链b中data值为x的节点的层数。  
  15.   (5)判断二叉树是否相似(关于二叉树t1和t2相似的判断: 
  16. ①t1和t2都是空的二叉树,相似; 
  17. ②t1和t2之一为空,另一不为空,则不相似; 
  18. ③t1的左子树和t2的左子树是相似的,且t1的右子树与t2的右子树是相似的,则t1和t2相似。)  
  19. 输入描述:无 
  20.   
  21. 输出描述:树是否相似 
  22.   
  23. */   
  24.   
  25. //求所有结点:  
  26. #include <stdio.h>  
  27. #include "../btree.h"//用到了btree.h  
  28.   
  29. int Nodes(BTNode *b)  
  30. {  
  31.     if (b==NULL)  
  32.         return 0;//空树返回0  
  33.     else  
  34.         return Nodes(b->lchild)+Nodes(b->rchild)+1;//递归求解  
  35. }  
  36. int main()  
  37. {  
  38.     BTNode *b;  
  39.     CreateBTNode(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))");  
  40.     printf("二叉树节点个数: %d\n", Nodes(b));  
  41.     DestroyBTNode(b);  
  42.     return 0;  
  43. }  
  44.   
  45.   
  46.   
  47.   
  48.   
  49. //输出叶子结点:  
  50.   
  51.   
  52. #include <stdio.h>  
  53. #include "../btree.h"  
  54.   
  55. void DispLeaf(BTNode *b)  
  56. {  
  57.     if (b!=NULL)  
  58.     {  
  59.         if (b->lchild==NULL && b->rchild==NULL)//如果为叶结点的条件  
  60.             printf("%c ",b->data);  
  61.         else  
  62.         {  
  63.             DispLeaf(b->lchild);  
  64.             DispLeaf(b->rchild);  
  65.         }  
  66.     }  
  67. }  
  68. int main()  
  69. {  
  70.     BTNode *b;  
  71.     CreateBTNode(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))");  
  72.     printf("二叉树中所有的叶子节点是: ");  
  73.     DispLeaf(b);  
  74.     printf("\n");  
  75.     DestroyBTNode(b);  
  76.     return 0;  
  77. }  
  78.   
  79. //叶节点个数:  
  80.   
  81. #include <stdio.h>  
  82. #include "btree.h"  
  83.   
  84. int LeafNodes(BTNode *b)//求二叉树b的叶子节点个数  
  85. {  
  86.     int num1,num2;  
  87.     if (b==NULL)//空树  
  88.         return 0;  
  89.     else if (b->lchild==NULL && b->rchild==NULL)//为页结点  
  90.         return 1;  
  91.     else//递归求解  
  92.     {  
  93.         num1=LeafNodes(b->lchild);  
  94.         num2=LeafNodes(b->rchild);  
  95.         return (num1+num2);  
  96.     }  
  97. }  
  98.   
  99. int main()  
  100. {  
  101.     BTNode *b;  
  102.     CreateBTNode(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))");  
  103.     printf("二叉树b的叶子节点个数: %d\n",LeafNodes(b));  
  104.     DestroyBTNode(b);  
  105.     return 0;  
  106. }  
  107.   
  108. //结点深度:  
  109.   
  110. #include <stdio.h>  
  111. #include "../btree.h"  
  112.   
  113. int Level(BTNode *b,ElemType x,int h)  
  114. {  
  115.     int l;  
  116.     if (b==NULL)  
  117.         return 0;  
  118.     else if (b->data==x)//找到值  
  119.         return h;  
  120.     else  
  121.     {  
  122.         l=Level(b->lchild,x,h+1);  
  123.         if (l==0)  
  124.             return Level(b->rchild,x,h+1);  
  125.         else  
  126.             return l;  
  127.     }  
  128. }  
  129.   
  130. int main()  
  131. {  
  132.     BTNode *b;  
  133.     CreateBTNode(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))");  
  134.     printf("值为\'K\'的节点在二叉树中出现在第 %d 层上\n",Level(b,'K',1));  
  135.     DestroyBTNode(b);  
  136.     return 0;  
  137. }  
  138.   
  139.   
  140. //树相似:  
  141.   
  142. #include <stdio.h>  
  143. #include "../btree.h"  
  144.   
  145. int Like(BTNode *b1,BTNode *b2)  
  146. {  
  147.     int like1,like2;  
  148.     if (b1==NULL && b2==NULL)//相似  
  149.         return 1;  
  150.     else if (b1==NULL || b2==NULL)//不相似  
  151.         return 0;  
  152.     else  
  153.     {  
  154.         like1=Like(b1->lchild,b2->lchild);//递归  
  155.         like2=Like(b1->rchild,b2->rchild);  
  156.         return (like1 && like2);  
  157.     }  
  158. }  
  159.   
  160. int main()  
  161. {  
  162.     BTNode *b1, *b2, *b3;  
  163.     CreateBTNode(b1,"B(D,E(H(J,K(L,M(,N)))))");  
  164.     CreateBTNode(b2,"A(B(D(,G)),C(E,F))");  
  165.     CreateBTNode(b3,"u(v(w(,x)),y(z,p))");  
  166.     if(Like(b1, b2))  
  167.         printf("b1和b2相似\n");  
  168.     else  
  169.         printf("b1和b2不相似\n");  
  170.     if(Like(b2, b3))  
  171.         printf("b2和b3相似\n");  
  172.     else  
  173.         printf("b2和b3不相似\n");  
  174.     DestroyBTNode(b1);  
  175.     DestroyBTNode(b2);  
  176.     DestroyBTNode(b3);  
  177.     return 0;  
  178. }  


运行结果:

1.


2.



3.


4.



5.


学习心得:

学会了二叉链存储结构存储实现算法

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 买苹果手机时查到了翻新机该怎么办 荣耀9青春版玩王者卡怎么办 红米4x手机声音突然成破音怎么办 红米pro玩王者荣耀卡怎么办 红米手机恢复出厂设置出错了怎么办 红米恢复出厂设置出错了怎么办 应聘工作上当收押金了该怎么办 红米1s密码忘了怎么办 红米1s刷机后开不了机怎么办 红米2a耗电超快怎么办 红米2a手机耗电快怎么办 红米4x触屏失灵怎么办 苹果恢复出厂设置后密码忘记怎么办 红米1s忘记密码锁屏了怎么办 红米3手机忘记解锁图案怎么办 小米5x手机录屏失败怎么办 红米4x手机wif信号不好怎么办 红米4x屏幕换了截屏不好使怎么办 红米手机2a卡慢怎么办? 红米手机连接无线网信号不好怎么办 小米4用久了很卡怎么办 红米4a关不了机怎么办 红米手机屏幕锁了忘记密码怎么办 手机锁了忘记密码怎么办 红米 红米4a开不开机怎么办 红米显示小人开不了机怎么办 红米手机找回微信密码怎么办 红米手机密码忘了怎么办数字锁 红米1s忘了密码怎么办 红米手机下面三个键失灵怎么办 红米note手机没声音了怎么办 魅蓝3s被锁了怎么办 小米5x的4g网速慢怎么办 红米一体机与后盖有裂缝怎么办? 红米4x喇叭坏了怎么办 红米4x电池坏了怎么办 小米电视4a开不了机怎么办 小米x4手机下面三个键失灵怎么办 红米4a一直重启怎么办 红米4a手机一直关机重启怎么办 红米5A手机4G信号差怎么办