二叉树

在计算机科学中,二叉树(英语:Binary tree)是每个节点最多只有两个分支(即不存在分支度大于2的节点)的树结构。通常分支被称作“左子树”或“右子树”。二叉树的分支具有左右次序,不能随意颠倒。

二叉树的遍历:

前序遍历、中序遍历、后续遍历

以下代码的二叉树图形表示

代码

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 10
typedef struct tag
{char c;//数的一个节点包含多个数据类型,可定义结构体,赋值时用memcopystruct tag *pleft;struct tag *pright;
}Node, *pNode;
//前序遍历:if中要打印的放前面
void preOrder(pNode p)
{if (p != NULL){putchar(p->c);//等价于printf("%c",c);preOrder(p->pleft);preOrder(p->pright);}
}
//中序遍历:if中要打印的放中间
void midOrder(pNode p)
{if (p != NULL){midOrder(p->pleft);putchar(p->c);midOrder(p->pright);}
}//后序遍历:if中要打印的放后面
void latOrder(pNode p)
{if (p != NULL){latOrder(p->pleft);latOrder(p->pright);putchar(p->c);}
}
int main()
{char c[N + 1] = "ABCDEFGHIJ";pNode p[N];//一共有N个节点,p[N]用于存储每一个节点的地址值pNode tree;//树的头指针int i, j;for (i = 0; i < N; i++)//把每个字母都放进树的节点中{p[i] = (pNode)calloc(1, sizeof(Node));p[i]->c = c[i];}tree = p[0];//树的头指针(树根)//以下实现节点的连结:广度优先遍历for (i = 0; i < N; i++)//外层循环控制往树坑里放的节点{for (j = 0; j < i; j++)//内层循环找空闲的树坑,放入节点{if (NULL == p[j]->pleft){p[j]->pleft = p[i];break;}if (NULL == p[j]->pright){p[j]->pright = p[i];break;}}}//遍历打印preOrder(p[0]);//前序遍历printf("\n");midOrder(p[0]);//中序遍历printf("\n");latOrder(p[0]);//后序遍历printf("\n");system("pause");
}

输出

ABDHIEJCFG
HDIBJEAFCG
HIDJEBFGCA
请按任意键继续. . .

VS2017查看监视

C语言 数据结构 二叉树实现、二叉树的三种递归遍历相关推荐

  1. C语言数据结构之线索二叉树

    C语言数据结构之线索二叉树 tips:前些天学习了二叉树的相关操作,今天来总结一下线索二叉树的操作. 线索二叉树:对二叉树以某种次序遍历得到序列中的前驱和后继,其中指向结点前驱和后继的指针称为线索,再 ...

  2. Python实现二叉树的三种深度遍历方法!

    python代码实现了二叉树,这次将会实现二叉树的几种遍历方法,来更好的解析二叉树的结构特点.分别是一种广度遍历,和三种深度遍历方法:先序遍历,中序遍历,后序遍历.下面是代码实现: 1.先序遍历 遍历 ...

  3. Python二叉树的三种深度优先遍历

    Python二叉树的三种深度优先遍历 一.广度优先遍历和深度优先遍历 对二叉树进行遍历(traversal)是指依次对树中每个节点进行访问,在遍历的过程中实现需要的业务. 对树的遍历方式有广度优先遍历 ...

  4. C语言交换两个数字的三种做法

    C语言交换两个数字的三种做法 1.借助中间变量法: void swap(int *a , int *b) {int temp;temp = *a;*a = *b;*b = temp; } 2.使用加减 ...

  5. c语言求最小公倍数和最大公约数三种算法

    C语言求最小公倍数和最大公约数三种算法(经典) 求最小公倍数算法: 最小公倍数=两整数的乘积÷最大公约数 求最大公约数算法: (1)辗转相除法 有两整数a和b: ① a%b得余数c ② 若c=0,则b ...

  6. C语言求最小公倍数和最大公约数三种算法(经典)

    C语言求最小公倍数和最大公约数三种算法(经典) 最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,其中一个最小的公倍数是他们的最小公倍数,同样地,若干个整数公有的倍数中最小的正整数称为 ...

  7. C语言 数据结构 树和二叉树

    树 1.树:是n节点的有限集.树是n(n=>0)个节点的有限集. n=0时成为空树. 在任意一颗非空树中:(1)有且仅有一个称为根的节点:(2)当n>0时,其余节点可分为m(m>0) ...

  8. 判断两棵二叉树是否同构,三种实现方式(递归、队列、堆栈)

    一.同构的概念: 给定两棵二叉树 T1 和 T2,如果T2可以通过若干次左右孩子互换就变成T1,那么我们称这两棵树是同构的 例1:下图两棵树同构,因为对T2,交换A左右孩子:交换B左右孩子,交换G左右 ...

  9. 二叉树三种递归和非递归遍历 层序遍历

    以下为二叉树的三种遍历(中序,先序,后序)源码,和非递归遍历源码.  中序 递归遍历 public static void inorderTraversal(TreeNode root) {if(ro ...

最新文章

  1. 独家 | 13大技能助你成为超级数据科学家!(附链接)
  2. iOS获取最上层控制器
  3. MYSQL触发器记录用户操作的命令
  4. legend3---laravel验证码使用
  5. js Math用法jquery是否为空对象判断
  6. 抽象方法vs虚方法 c# 1613719040
  7. python中为什么不支持char_python支持char吗
  8. 为何我中断执行的线程不起作用,Why
  9. Mysql更新字段中部分数据的方法
  10. linux下查看ntp对时的命令,linux 查看服务器时间命令
  11. sklearn中的损失函数
  12. 1.Prometheus 监控技术与实践 --- 云计算时代的监控系统
  13. You must install signalwire-client-c to build mod_signalwire。
  14. 分享5个苹果系统超实用的黑科技APP,个个都是精品
  15. oracle startup open ora 03113,解决oracle数据库ORA-03113问题
  16. 互联网晚报 | 10月27日 星期三 | 高德车道级导航正式发布;阿里淘菜菜发布“本地菜”计划;特斯拉市值破万亿美元...
  17. 如何高效率的使用Google搜索
  18. 有些人的恨是没有原因的,他们平庸、没有天分、碌碌无为,于是你的优秀、你的天赋、你的善良和幸福都是原罪。
  19. 爬瓜子二手车(json接口)
  20. 第十章 PL/SQL对象类型

热门文章

  1. 三年级人教版下学期计算机教案,人教版三年级下册信息技术教案
  2. 【数据结构】集合及运算
  3. 11.向量vector.rs
  4. QT乱码总结2.gbk和ANSI和gb2312的区别
  5. 获取网络时间并刷新本地时间(源码2)
  6. 详细解析Raid0、Raid0+1、Raid1、Raid5四者的区别
  7. 用了Elasticsearch后,查询起飞了!
  8. 干货 | 阿里巴巴HBase高可用8年抗战回忆录
  9. [七]RabbitMQ-客户端源码之AMQPImpl+Method
  10. Windows使用opencv训练模型过程记录(提供样本)