二叉链表存储的二叉C语言,C语言实现二叉链表存储
利用二叉链表存储,并且利用递归的方法实现二叉树的遍历(前序遍历、中序遍历和后续遍历)操作。
c语言具体实现代码如下:
#include
#include
#include
typedef int ElemType;//数据类型
//定义二叉树结构,与单链表相似,多了一个右孩子结点
typedef struct BiTNode
{
ElemType data;
struct BiTNode *lChild,*rChild;
}BiTNode,*BiTree;
//先序创建二叉树
int CreateBiTree(BiTree *T)
{
ElemType ch;
ElemType temp;
scanf("%d",&ch);
temp=getchar();
if(ch==-1)
{
*T=NULL;
}
else
{
*T=(BiTree)malloc(sizeof(BiTNode));
if(!(*T))
{
exit(-1);
}
(*T)->data=ch;
printf("输入%d的左子结点:",ch);
CreateBiTree(&(*T)->lChild);
printf("输入%d的右子结点:",ch);
CreateBiTree(&(*T)->rChild);
}
return 1;
}
//先序遍历二叉树
void TraverseBiTree(BiTree T)
{
if(T==NULL)
{
return;
}
printf("%d",T->data);
TraverseBiTree(T->lChild);
TraverseBiTree(T->rChild);
}
//中序遍历二叉树
void InOrderBiTree(BiTree T)
{
if(T==NULL)
{
return;
}
InOrderBiTree(T->lChild);
printf("%d",T->data);
InOrderBiTree(T->rChild);
}
//后序遍历二叉树
void PostOrderBiTree(BiTree T)
{
if(T==NULL)
{
return;
}
PostOrderBiTree(T->lChild);
PostOrderBiTree(T->rChild);
printf("%d",T->data);
}
//二叉树的深度
int TreeDeep(BiTree T)
{
int deep=0;
if(T)
{
int leftdeep=TreeDeep(T->lChild);
int rightdeep=TreeDeep(T->rChild);
deep=leftdeep>=rightdeep?leftdeep+1:rightdeep+1;
}
return deep;
}
//求二叉树叶子结点个数
int Leafcount(BiTree T,int &num)
{
if(T)
{
if(T->lChild==NULL&&T->rChild==NULL)
{
num++;
}
Leafcount(T->lChild,num);
Leafcount(T->rChild,num);
}
return num;
}
//主函数
int main(void)
{
BiTree T;
BiTree *p=(BiTree *)malloc(sizeof(BiTree));
int deepth,num=0;
printf("请输入第一个结点的值,-1表示没有叶结点:\n");
CreateBiTree(&T);
printf("先序遍历二叉树:\n");
TraverseBiTree(T);
printf("\n");
printf("中序遍历二叉树:\n");
InOrderBiTree(T);
printf("\n");
printf("后序遍历二叉树:\n");
PostOrderBiTree(T);
printf("\n");
deepth=TreeDeep(T);
printf("数的深度为:%d",deepth);
printf("\n");
Leafcount(T,num);
printf("数的叶子结点个数为:%d",num);
printf("\n");
return 0;
}
得到的结果如下图所示:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持猪先飞。
二叉链表存储的二叉C语言,C语言实现二叉链表存储相关推荐
- 三维叉乘怎么算_圆锥曲线第十四节:二次点乘与二次叉乘
目录: 质点:圆锥曲线题目的三维矢量解法zhuanlan.zhihu.com 我们在第八节中已经涉及到了"二次点"和"二次线"(它们统称二次曲线)的概念,我们 ...
- C语言实现通讯录【二】(动态内存开辟,文件数据存储)
C语言实现通讯录[二] 在C语言实现通讯录[一]的基础上进行优化,主要实现两大模块: 动态内存开辟 文件数据存储 动态内存开辟: 考虑到通讯录的大小无法固定,在C语言实现通讯录[一]版本上定义一个足够 ...
- C语言 一维数组、二维数组的创初始化、使用和存储
目录 数组 一维数组 一维数组的创建和初始化 一维数组的定义 一维数组的初始化 完全初始化 不完全初始化 一维数组的使用 一维数组的使用代码示例 一维数组在内存中的存储 代码示例 二维数组 二维数组的 ...
- 链表list(链式存储结构实现)_VOL.2 如何在python中实现链式存储结构
一.前言 链式存储作为一种重要的数据存储方式有着极强的数据组织能力.灵活型和动态性,在众多数据结构中应用非常广泛.所谓链式存储结构,就是采用分散的存储空间分别存储每一组数据再通过地址链接的形式将全部数 ...
- 金叉和死叉看哪几条线?股票macd金叉和死叉怎么看?
资本市场上,每天都在演绎着转瞬即逝的遗憾,和曙光来临的场景.怎么更好的把握住机遇,人工智能和<股市三大猜想>指出人类在金融领域探索的脚步从未停止过.资本追逐利益是投资者的责任与使命,是金融 ...
- 2.5 C语言入职例程二:指针
2.5.1 强化指针概念 指针是C语言中最基本且很重要的概念,某种程度上甚至可以说:指针是C语言的灵魂. 不巧的是,我们公司新招聘的好多新人对C语言指针都比较陌生.和大家交流,思考背后原因,可能要拜人 ...
- c语言基础深入理解二
指针基础 变量回顾 既然程序中的变量只是一段存储空间的别名 , 那么是不 是必须通过这个别名才能使用这段存储空间 ? 指针本质 ? 指针在本质上也是一个变量 ? 指针需要占用一定的内存空间 ? ...
- c语言学习笔记(8)c 语言面试题(二)
C练习1-9详解 转载我喜欢我看向别处你望向我的目光 最后发布于2019-05-06 10:30:16 阅读数 239 收藏 展开 不变的真理 int a[5]={1,2,3,4,5}; a[0]=* ...
- 2014软专高级程序语言T2(用向量叉乘判断点与三角形的位置关系)
编写程序,输入A,B,C,D四个点的坐标,假设A,B,C三点可以构成一个三角形,判断D点是否落在三角形内. 解题思路: 假设三角形的三个点按照顺时针(或者逆时针)顺序是A,B,C.对于某一点P,求出三 ...
- C语言一维数组、二维数组、结构体的初始化
C语言数组的初始化表示方法 一.C语言一维数组初始化: (1)在定义数组时对数组元素赋以初值.如: static int a[10]={0,1,2,3,4,5,6,7,8,9}; 经过上面的定义和初始 ...
最新文章
- mysql浅拷贝_深入理解浅拷贝和深拷贝
- java 调用jira_java调用jira接口
- c语言中 调用函数除函数名外,【单选题】在 C 语言中 , 调用函数除函数名外 , 还必须有 ( ). (10.0分)
A. 函数预说明 B. 实际参数 C. ( ) D. 函数返回值...
- 剪枝实践:图像检索如何加速和省显存 ?
- HipHop PHP HHVM资料收集
- python find函数_Python 装饰器填坑指南 | 最常见的报错信息、原因和解决方案
- Linq = MyMetal = SqlMetal Include 自定义(Linq to sql )生成
- 简单的MPI+Fortran95实现
- 浩哥的Linux学习笔记之touch命令
- Facebook全球争夺工智能人才,看上了中国高校
- 一起来学习Java浮点类型
- VS Code中常用插件
- pytorch系列教程(四)-自定义损失函数
- 红帽RHCE考试 VSFTP强化实战
- windows下整合UCenter、ECShop、Discus
- mall前端项目的安装与部署
- mcrypt拓展_php7.2 安装mcrypt扩展
- python中factor函数_【T】R中的因子(factor),levels, reorder
- 小进规,武汉市小微服务业企业进入规模服务业企业条件指南
- yoga 使用 鼠标设置