当前位置: 首页 > news >正文

数据结构12:二叉树的API及其实现

文章目录

  • 简介
  • 函数递归
  • 二叉树API介绍及其实现
    • 创建函数
    • 前序遍历
    • 中序遍历
    • 后序遍历
    • 销毁函数:
    • 小结

简介

在上一节,我们讲了二叉树的数据结构和遍历方式。这一节,我们讲解二叉树的API函数以及其实现方式。二叉树的API函数如下所示:

//二叉树生成函数
treeNode* TreeCreate(void);
//二叉树的前序遍历
int PreOrder(treeNode *T);
//二叉树的中序遍历
int InOrder(treeNode *T);
//二叉树的后序遍历
int PostOrder(treeNode *T);
//二叉树的销毁
int TreeDestory(treeNode **T);

函数递归

二叉树的API函数,几乎都是以递归函数的方式实现,在介绍二叉树的API前,我们简单了解一下递归。
简单的说,函数递归就是函数通过自己调用自己来实现某些功能。它需要满足条件:1.有反复执行的过程(调用自身)2.有跳出反复执行过程的条件(递归出口)。下面我们来看一个简单的例子,函数阶乘的递归实现,代码如下:
执行结果如图1所示:

#include"stdio.h"
#include"stdlib.h"
int Factorial(int n)
{int ret;//输入数据检测if (n < 0){printf("Input Error\n");return -1;}//跳出判断if (n == 0 || n == 1){ret = 1;}else{//调用自身ret = Factorial(n - 1)*n;}return ret;
}
int main()
{printf("%d\n",Factorial(3));system("pause");return 0;
}

在这里插入图片描述
在上面的代码中,我们可以看到递归的实现及其满足的两个条件。对于递归,如果感兴趣的话,可以看我们C语言部分的教程。

二叉树API介绍及其实现

创建函数

二叉树生成函数

treeNode* TreeCreate(void)
{char data;treeNode *T = NULL;scanf("%c",&data);if (data == '#'){T = NULL;}else{T = (treeNode*)malloc(sizeof(treeNode));memset(T, 0, sizeof(treeNode));T->data = data;T->lchild = TreeCreate();T->rchild = TreeCreate();}return T;
}

创建时采用字符“#”代表“NULL”,当输入“#”时表示树的左孩子或右孩子为NULL,即没有对应的孩子。创建二叉树时,当输入的字符不为“#”时,分配一个treeNode大小的内存空间,用来存储节点数据,然后采用调用自身完成创建。输入数据时,按照前序遍历的数据输入数据。例如要要生成如图2中的树,要输入:ABD##E##CF##G##。
在这里插入图片描述
应用代码:

treeNode *Tree = NULL;
Tree = TreeCreate();

前序遍历

二叉树的前序遍历

int PreOrder(treeNode *T)
{if (T == NULL){return -1;}printf("%c\n", T->data);PreOrder(T->lchild);PreOrder(T->rchild);return 0;
}

前序遍历,首先打印节点数据(实际使用时,可以对应其他需要的操作),然后在递归访问左右子树。
应用代码:

printf("前序遍历:\n");
PreOrder(Tree);

中序遍历

二叉树的中序遍历

int InOrder(treeNode *T)
{if (T == NULL){return -1;}InOrder(T->lchild);printf("%c\n", T->data);InOrder(T->rchild);return 0;
}

中序遍历,首先递归访问左子树,然后打印节点数据(实际使用时,可以对应其他需要的操作),最后在递归访问右子树。
应用代码:

printf("中序遍历:\n");
InOrder(Tree);

后序遍历

二叉树的后序遍历

int PostOrder(treeNode *T)
{if (T == NULL){return -1;}PostOrder(T->lchild);PostOrder(T->rchild);printf("%c\n", T->data);return 0;
}

后序遍历,首先递归访问左右子树,然后打印节点数据(实际使用时,可以对应其他需要的操作)。
应用代码:

printf("后序遍历:\n");
PostOrder(Tree);

销毁函数:

二叉树的销毁

int TreeDestory(treeNode **T)
{if (T == NULL){//非法输入return -1;}if (*T == NULL){//空树return -1;}//遍历左子树if ((*T)->lchild != NULL){TreeDestory(&(*T)->lchild);(*T)->lchild = NULL;}//遍历右子树if ((*T)->rchild != NULL){TreeDestory(&(*T)->rchild);(*T)->rchild = NULL;}//删除节点if (*T != NULL){free(*T);*T = NULL;}return 0;
}

销毁函数也采用递归的方式,访问各个节点,然后释放内存,并将指针指向NULL。
应用代码:

TreeDestory(&Tree);

小结

二叉树的API函数都是通过递归实现的,理解递归后会很好理解其API函数的实现方式。二叉树的API的实现方法,对我们的编程也有很多可借鉴之处。

http://www.dtcms.com/a/529374.html

相关文章:

  • 用c 建网站时怎么做导航菜单栏访问升级每天自动更新
  • 江门做网站设计wordpress通用页面模板
  • 苏州吴中区专业做网站网站建设制作设计开发
  • 2025辽宁CSP-XL编程设计题与参考答案
  • 网站怎么做值班表郫都区规划建设局网站
  • 网站做查赚钱如何做简单的网站 域名邮箱
  • 网站建设与管理的书中国建设银行网站首页下载
  • Java—单例类(设计模式)
  • Linux 网络总结
  • 第一章-第三节-Java开发环境配置
  • 河南濮阳建设局网站天坛装修公司口碑怎么样
  • 关于Java回调函数的使用笔记
  • 贵州网站开发哪家好浙江网站推广公司
  • C语言——栈与队列
  • 企业门户网站源码商丘网站制作教程
  • 云南哪里有给做网站的免费在线响应式网站自助建站
  • Java注解与反射实现日志与校验
  • docker-compose方式快速安装MySQL
  • 可信网站是否有规定必须做ps网页设计怎么做
  • AtCoder Beginner Contest 425 题解
  • 做瓷砖在什么网站上找素材好网站改标题关键词描述
  • GitHub等平台形成的开源文化正在重塑凯特
  • 惠州网站建设 鑫河南建设资格执业网站
  • Linux 下 Docker 与 ClickHouse 的安装配置及 MySQL 数据同步指南
  • 怎么建立一个个人网站企业如何注册网站
  • JAVA1025 类:继承:interface,接口继承必须实现接口方法;extends单继承 抽象类 属性 static
  • CVE-2025-50154漏洞复现与技术分析报告
  • 时间序列数据异常检测算法(6)——基于深度学习的算法
  • dw中网站建设的基本流程三亚网站建设费用
  • 深圳做网站企业手机大全