【数据结构】—— 二叉树(C)

news2025/7/13 0:42:38

二叉树

文章目录

  • 二叉树
    • 二叉树的概念:
    • 树的术语
    • 二叉树的大概样式
    • 先序创建二叉树
    • 二叉树的遍历方式
      • 先序遍历
      • 中序遍历
      • 后序遍历

二叉树的概念:

二叉树(Binary Tree)是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根节点和两棵互不相交的、分别称为根节点的左子树和右子树的二叉树组成。

树的术语

树和子树:以根结点为根的树为全树,以其他结点作为根结点的树为子树

结点的度:表示当前结点拥有的分支个数

树的度:就是当前树结点最多拥有的度

叶子结点:度为0的结点就是叶子结点,它位于树最深层

树根结点:每一个非空树都有且只有一个被称为根的结点。此外如果一个结点没有父结点,那么这个结点就是整棵树的根结点

父结点:若一个结点含有子结点,则这个结点称为其子结点的父结点

子结点:一个结点含有的子树的根结点称为该结点的子结点

祖先:对任意结点x,从根结点到结点x的所有结点都是x的祖先(结点x也是自己的祖先)

子孙:对任意结点x,从结点x到叶子结点的所有结点都是x的子孙(结点x也是自己的子孙)

兄弟结点:拥有共同父结点的结点互称为兄弟结点

路径:从一个结点到另一个结点之间的边和结点构成路径

层次:树根开始定义,根结点为第1层,它的子结点为第2层,以此类推

结点的深度:对任意结点x,x结点的深度表示为根结点到x结点的路径长度。所以根结点深度为0,第二层结点深度为1

树的深度:类似树的度对应于结点的度一样,最深的结点的深度

结点高度:对任意结点x,叶子结点到x结点的路径长度就是结点x的高度

森林:由 m (m >= 0)个互不相交的树组成的集合被称为森林。(上图以B,C为根节点的两棵子树就可以被称为森林)

二叉树的大概样式

单个节点:
请添加图片描述

树的形式:
请添加图片描述

//二叉树结构体的建立包括:数据域、左孩子指针、右孩子指针
typedef struct BiTNode {
    char data;
    struct BiTNode* lchild;
    struct BiTNode* rchild;
}BiTNode, * BiNodeTree;


先序创建二叉树

//先序建立二叉树
BiNodeTree CreateBiTree() {
    char ch;
    scanf("%c", &ch);
    BiNodeTree root;
    if (ch == '#') {
        root = NULL;
    } else {
        root = (BiNodeTree)malloc(sizeof(BiTNode));
        root->data = ch;
        root->lchild = CreateBiTree();
        root->rchild = CreateBiTree();
    }
    return root;//返回根节点
}

二叉树的遍历方式

先序遍历

遍历顺序是根节点、左子树、右子树。
![在这里插入图片描述](https://img-blog.csdnimg.cn/57131775b3274ec0b2eb9fee07f54906.png

//先序遍历二叉树

void  PreOrderTraverse(BiNodeTree root) {
    if (root) {
        printf("%c ",root->data);
        PreOrderTraverse(root->lchild);
        PreOrderTraverse(root->rchild);
    }
}

中序遍历

遍历顺序:左子树、根节点、右子树
在这里插入图片描述

//中序遍历二叉树 
void InOrderTraverse(BiNodeTree root) {
    if (root) {
        InOrderTraverse(root->lchild);
        printf("%c",root->data);
        InOrderTraverse(root->rchild);
    }
}

后序遍历

遍历顺序:左子树、右子树、根节点
在这里插入图片描述

//后序遍历二叉树 
void PostOrderTraverse(BiNodeTree root) {
    if (root) {
        PostOrderTraverse(root->lchild);
        PostOrderTraverse(root->rchild);
        printf("%c",root->data);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/8844.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

bugku-web-安慰奖

题目没给提示 点开链接 是空白页面 查看源代码 base64加密 拿去解码 备份文件 使用工具跑一下目录 (dirsearch) 存在一个flag.php文件 但是访问没有结果 锁定index.php.bak 文件 下载下来 打开 进行代码审计 是php序列化 反序列化的内容 代码审计&…

【Python】Numpy生成坐标网格

文章目录meshgridmgrid和ogridindicesmeshgrid 在三维图的绘制过程中,一般需要x,y,zx,y,zx,y,z之间的对应关系,但对于图像而言,其x,yx,yx,y轴坐标是体现在像素栅格中的,从而图像矩阵中的像素强度,其实表示的是zzz轴的…

深度学习算法应用——使用LSTM对双色球进行统计与预测

前言 福彩双色球的玩法和规则是双色球投注区分为红色球号码区和蓝色球号码区,红色球号码从1-33,蓝色球号码是从1-16。投注方法是,从红色区选出6个不重复的号码再加上蓝色区的一个号组成一个投注组。双色球通过摇奖器确定中奖号码&#xff0c…

Zookeeper中的watch机制

客户端,可以通过在znode上设置watch,实现实时监听znode的变化Watch事件是⼀个⼀次性的触发器,当被设置了Watch的数据发⽣了改变的时候,则服务器将这个改变发送给设置了Watch的客户端⽗节点的创建,修改,删除…

观测云产品更新|新增观测云、SLS 联合解决方案;新增 3 个智能巡检配置文档;新增链路错误追踪查看器等

观测云更新 新增观测云、SLS 联合解决方案 观测云新增 SLS 存储方案,支持阿里云 SLS 用户能够快速使用观测云做数据查看分析。在观测云进行商业版注册/升级时,选择”阿里云账号结算“后,您可以选择SLS 存储方案,将数据存放在自…

SpringBoot SpringBoot 开发实用篇 1 热部署 1.3 热部署范围配置

SpringBoot 【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇1 热部署1.3 热部署范围配置1.3.1 问题引入1.3.2 热部署配置范围1.3.…

Spring Cloud(十):Spring Cloud Skywalking 以及 JavaAgent

链路追踪组件选型 Zipkin是Twitter开源的调用链分析工具,目前基于springcloud sleuth得到了广泛的使用,特点是轻量,使用部署简单。Pinpoint是韩国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件&…

CASIO程序(线路计算6.0版)

一、扩展变量设置说明 统计各种要素点的数目 各要素点数目表 名 称 平曲线交点 竖曲线变坡点 超高起始点 最多台阶数 线路导线点 数目(个) a b c d e 要素点数目为0时取值 -1 -5/3 0 0 0 备 注 不含起终点 不含起终点 含起…

【LeetCode 力扣】1.两数之和 Java实现 哈希表

题目链接:1.两数之和 1 原题描述: 2 解题思路 初看题目相信大家都能想到枚举的做法,简单来说把数组里面的所有值,均两两组合相加。若结果与target相等,则将两个数字的下标返回即可。 代码实现1: class …

C++入门学习5-共用体,枚举类型,宏定义

入门学习五共用体枚举类型宏定义共用体 共用体也称为联合体,其特点就是用一段连续的内存存储多个不同数据类型的数据,在写法上与结构体相似,但是在同一时刻,共用体中只有一个值是有效的,其大小由共用体中最大的数据类…

做PPT绝对不能错过这5个网站

免费高质量PPT模板网站,建议收藏!1、菜鸟图库 https://www.sucai999.com/pptx.html?vNTYxMjky菜鸟图库里面有各种类型的PPT模板和素材。下载后模板可以直接套用,也可以自己添加素材进行修改。所有素材都一一进行了详细的分类,而且…

【前端】Flet:一款支持python及多语言开发的UI库

文章目录介绍开发生态支持语言运行体验组件API热更新开发计划 Roadmap2022 7月-8月安全手机端桌面端Controls(控件)核心功能用户指引(User education)2022 9月到12月手机端控件(Controls)编程语言支持核心功能介绍 Flet enables …

【设计模式-2】策略模式 - 避免冗余的if-else判断。数据库迁移框架、flink 类型转换框架例子对策略模式的使用

文章目录1. 介绍2. 策略模式结构3. 策略模式使用3.1. 场景一: 表迁移3.2. flink connector类型转换1. 介绍 当if else过多时&#xff0c;可以通过策略模式来进行重构。先定义一个接口&#xff0c;各else处理分支实现这个接口&#xff0c;并定义 < 条件 , 处理类 > 的映射…

NNG 通信模式

NNG 是 nanomsg 的继任版本,纯c语言开发&#xff0c;工作模式分为几种&#xff1a; 1&#xff0c;Pipeline (A One-Way Pipe) 单向通信&#xff0c;类似与生产者消费者模型的消息队列&#xff0c;消息从推方流向拉方。 #include <stdlib.h> #include <stdio.h> #…

[附源码]java毕业设计基于的图书馆管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

RabbitMQ(四):RabbitMQ高级特性

消息队列在使用过程中&#xff0c;面临着很多实际问题需要思考&#xff1a; 消息可靠性问题&#xff1a;如何确保发送的消息至少被消费—次延迟消息问题&#xff1a;如何实现消息的延迟投递消息堆积问题&#xff1a;如何解决数百万消息堆积&#xff0c;无法及时消费的问题高可用…

面试官:MySQL 上亿大表如何优化?

背景 XX 实例&#xff08;一主一从&#xff09;xxx 告警中每天凌晨在报 SLA 报警&#xff0c;该报警的意思是存在一定的主从延迟。&#xff08;若在此时发生主从切换&#xff0c;需要长时间才可以完成切换&#xff0c;要追延迟来保证主从数据的一致性&#xff09; XX 实例的慢…

Oracle LiveLabs实验:Manage Database Instance and Memory for Oracle Database 21c

概述 此实验申请地址在这里。 实验帮助在这里。 此实验预估完成时间100分钟。 该研讨会介绍了 Oracle 数据库实例的基本知识&#xff0c;并指导您管理 Oracle 数据库的初始化参数和内存结构。 管理初始化参数以在 Oracle 数据库上执行关键任务&#xff0c;例如管理数据库实…

【教学类-08-01】20221010《门牌号(6层*3间 黑色版)》(大班主题《我们的城市》)

效果展示 背景需求&#xff1a; 我的小课题《运用Python设计大班层次性纸类学具的案例研究》获得2022年MHQ小课题立项&#xff0c;在前期的《学号名字描字帖》《身份证》《数字分合》《破译电话号码》的基础上&#xff0c;需要设计更多与大班主题活动书上的主题相关的学习材料。…

利用css 动画实现节流

节流指的避免过于频繁的执行一个函数&#xff0c;例如&#xff1a;一个保存按钮&#xff0c;为了避免重复提交或者服务器考虑&#xff0c;往往需要对点击行为做一定的限制&#xff0c;不然会频繁的请求接口&#xff0c;之前基本上是通过js去控制节流问题&#xff0c;其实css也能…