1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4.  
  5. #define num 100
  6. #define OK 1
  7.  
  8. typedef int Status;
  9. typedef char DataType;
  10.  
  11. typedef struct node
  12. {
  13. DataType data;
  14. struct node *lchild,*rchild;
  15. }BinTNode,*BinTree;
  16.  
  17. Status CreateBiTree(BinTree &bt)
  18. {//按照先序遍历次序递归建立二叉树。
  19. //ABC@@DE@G@@F@@
  20. char ch;
  21. scanf("%c",&ch);
  22. if(ch == '@') bt = NULL;
  23. else
  24. {
  25. bt = (BinTNode*)malloc(sizeof(BinTNode));
  26. bt->data = ch; //生成根结点
  27. CreateBiTree(bt->lchild); //构造左子树
  28. CreateBiTree(bt->rchild); //构造右子树
  29. }
  30. return OK;
  31. }
  32.  
  33. Status Inorder(BinTree bt)
  34. {//二叉树中序遍历非递归算法
  35. BinTNode *stack[num]; //定义栈数组
  36. int top = ; //初始化栈
  37. stack[top] = bt;
  38. do
  39. {
  40. while(NULL!=stack[top])
  41. {//扫描根结点及其所有的左结点并入栈
  42. top = top+;
  43. stack[top] = stack[top-]->lchild;
  44. }
  45. top = top-; //退栈
  46. if(top>=) //判断栈是否为空
  47. {
  48. printf("%c",stack[top]->data); //访问结点
  49. stack[top] = stack[top]->rchild; //扫描右子树
  50. }
  51. }while(top>=);
  52. return OK;
  53. }
  54.  
  55. /*
  56. void Vist(char ch)
  57. {
  58. printf("%c",ch);
  59. }
  60. */
  61.  
  62. void PostOrder(BinTree bt)
  63. {//二叉树后序遍历递归算法
  64. if(bt)
  65. {
  66. PostOrder(bt->lchild);
  67. PostOrder(bt->rchild);
  68. printf("%c",bt->data);
  69. }
  70.  
  71. }
  72.  
  73. int Size(BinTree bt)
  74. {//统计二叉树中所有结点的个数
  75. int num1,num2;
  76. if(bt==NULL)
  77. return ;
  78. else if(bt->lchild==NULL && bt->rchild==NULL)
  79. return ;
  80. else
  81. {
  82. num1 = Size(bt->lchild);
  83. num2 = Size(bt->rchild);
  84. return (num1+num2+);
  85. }
  86. }
  87.  
  88. int LeafCount(BinTree bt)
  89. {//叶子结点总数为
  90. int LeafNum;
  91. if(bt==NULL)
  92. LeafNum = ;
  93. else if((bt->lchild==NULL) && (bt->rchild==NULL)) LeafNum = ;
  94. else LeafNum = LeafCount(bt->lchild)+LeafCount(bt->rchild);
  95. //叶子数为左右子树叶子数目之和
  96. return LeafNum;
  97. }
  98.  
  99. int Depth(BinTree bt)
  100. {//统计二叉树深度
  101. int hl,hr,max;
  102. if(bt!=NULL)
  103. {
  104. hl = Depth(bt->lchild); //求左子树的深度
  105. hr = Depth(bt->rchild); //求右子树的深度
  106. max = hl>hr?hl:hr;
  107. return (max+); //返回树的深度
  108. }
  109. else
  110. return ;
  111. }
  112. void Exchange(BinTree bt)
  113. {//交换左右二叉树
  114. if(bt == NULL)
  115. return;
  116. BinTNode *temp;
  117. temp = bt->lchild;
  118. bt->lchild = bt->rchild;
  119. bt->rchild = temp;
  120. Exchange(bt->lchild);
  121. Exchange(bt->rchild);
  122. }
  123.  
  124. void main()
  125. {
  126. BinTree bt;
  127. int xz = ;
  128. int yz,sd;
  129. while(xz)
  130. {
  131. printf("二叉树的建立及其基本操作\n");
  132. printf("===========================\n");
  133. printf("1,建立二叉树的存储结构\n");
  134. printf("2,二叉树的基本操作\n");
  135. printf("3,交换二叉树的左右\n");
  136. printf("0退出系统\n");
  137. printf("==========================\n");
  138. printf("请选择:(0~3)\n");
  139. scanf("%d",&xz);
  140. getchar();
  141. switch(xz)
  142. {//输入:ABC@@DE@G@@F@@@输出:CBEGDFA
  143. case :
  144. printf("输入二叉树的先序序列结点值:\n");
  145. CreateBiTree(bt);
  146. printf("二叉树的链式存储结构建立完成\n");
  147. printf("\n");
  148. break;
  149. case :
  150. printf("该二叉树的后序遍历序列是:");
  151. PostOrder(bt);
  152. printf("\n"); //输出CGEFDBA
  153. printf("该二叉树的中序遍历序列是:");
  154. Inorder(bt);
  155. printf("\n"); //输出CBEGDFA
  156. printf("该二叉树的结点的个树是:%d\n",Size(bt));
  157. yz = LeafCount(bt);
  158. printf("叶子结点个数是:%d\n",yz);
  159. sd = Depth(bt);
  160. printf("该二叉树的深度是:%d\n",sd);
  161. printf("\n");
  162. break;
  163. case :
  164. Exchange(bt);
  165. printf("该二叉树已交换左右子树!\n");
  166. printf("\n");
  167. break;
  168. case :
  169. break;
  170.  
  171. }
  172. }
  173. }

<二叉树的基本操作>的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. Unity 之 Time

    Time.deltaTime  指完成每一帧的时间,根据得到实际的测试,可以看到每一帧的所用时间不一致,差距很微小. Time.deltaTime在Update和FixedUpdate中显示的是不一样 ...

  2. Ambari安装指南

    一.准备工作 l 基本工具 1) 安装epel,epel是一个提供高质量软件包的项目.先检查主机上是否安装: rpm -q epel-release 2) 如果没有安装,使用rpm命令安装: rpm ...

  3. FAILED Selenium2Library

    FAILED Selenium2Library Importing test library 'Selenium2Library' failed: ImportError: cannot import ...

  4. codevs 1200 同余方程 逆元

    题目描述 Description 求关于 x 同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入描述 Input Description 输入只有一行,包含两个正整数 a, b,用 一个 空 ...

  5. RobotFramework安装指南

    Python下载 https://www.python.org/downloads Setuptools下载 https://pypi.python.org/pypi/setuptools 用原装各种 ...

  6. Android中如何实现EditText的自动换行

    要实现EditText的自动换行需要实现如下设置: <EditText android:id="@+id/function_lifingcost_edit_txtRemark" ...

  7. table maker's delimma

    table maker's delimma是计算机浮点数精度的一个问题. 浮点数的表示方式 计算机能表示的数字都是有理数,所有的有理数都可以归结为下面的模式:1.@@@ × 2#### 其中,@@@ ...

  8. English trip -- VC(情景课)10 A Get ready 预备课

    Words dance  跳舞 exercise  运动:锻炼 fish  鱼 play basketball  打篮球 play cards 玩牌 swim  游泳 decorations 装饰品 ...

  9. C++中的构造函数,拷贝构造函数,赋值函数

    C++中一般创建对象,拷贝或赋值的方式有构造函数,拷贝构造函数,赋值函数这三种方法.下面就详细比较下三者之间的区别以及它们的具体实现 1.构造函数 构造函数是一种特殊的类成员函数,是当创建一个类的对象 ...

  10. Java容器涉及的类(代码)

    Customer: public class Customer implements Comparable{ private Integer customerId; private String cu ...