数据结构 - 树与二叉树

news2024/9/21 18:53:40

一.普通有序树的定义

1.树的概念及特性

二.二叉树的定义

1.二叉树的性质

2.二叉树的分类

        ①.满二叉树

             每一层的结点数都为最大值

        ②.完全二叉树

                完全二叉树是由满二叉树从下向上从右向左依次擦除若干个结点

3.二叉树的结构

三.链式二叉树的创建

1.链式二叉树的结构体定义

typedef int data_t;

typedef struct btreenode
{
    data_t data;                            //数据域
    struct btreenode *lchild,*rchild;       //左结点与右结点的指针
}btree_node_t;

2.二叉树的创建

/**
 * @description:            使用键盘输入,创建一个二叉树
 * @param           :       无
 * @return          :       创建的二叉树的根结点指针
*/
btree_node_t *Btree_Create(void)
{
    data_t ch;                  //存储键盘输入的数据
    btree_node_t *new;          //指向新创建的结点

    /* 1.键盘输入要创建的结点的 data域 的值 */
    scanf("%c",&ch);
    if('#' == ch)
        return NULL;
    else
    {
        /* 2.创建根结点 */
        new = (btree_node_t *)malloc(sizeof(btree_node_t));
        if(NULL == new)
        {
            perror("malloc error");
            return NULL;
        }

        /* 3.为根结点填充数据 */
        new->data = ch;

        /* 4.用相同的方法创建左子树 */
        new->lchild = Btree_Create();

        /* 5.用相同的办法创建右子树 */
        new->rchild = Btree_Create();
    }

    /* 6.返回根结点指针 */
    return new;
    
}

四.二叉树的遍历

1.先序序列、中序序列、后序序列

①.先序序列:

        第一次经过结点的时候,去访问这个结点

②.中序序列:

        第二次经过结点的时候,去访问这个结点

③.后续序列:

        第三次经过结点的时候,去访问这个结点

④.层次遍历

2.遍历算法

①.先序递归遍历算法

/**
 * @description:            二叉树的先序遍历递归算法
 * @param - t       :       要遍历二叉树的指针
 * @return          :       无
*/
void Pre_order(btree_node_t *t)
{
    /* 树不为空 */
    if(NULL != t)
    {
        /* 1.访问根结点 */
        printf("%c  ",t->data);

        /* 2.先序遍历左子树 */
        Pre_order(t->lchild);

        /* 3.先序遍历右子树 */
        Pre_order(t->rchild);
    }
}

②.中序递归遍历算法

/**
 * @description:            二叉树的中序遍历递归算法
 * @param - t       :       要遍历的二叉树的指针
 * @return          :       无
*/
void Mid_order(btree_node_t *t)
{
    /* 树不为空 */
    if(NULL != t)
    {
        /* 1.中序遍历左子树 */
        Mid_order(t->lchild);

        /* 2.访问根结点 */
        printf("%c  ",t->data);

        /* 3.中序遍历右子树 */
        Mid_order(t->rchild);
    }
}

③.后序递归遍历算法啊

/**
 * @description:            二叉树的后序遍历递归算法
 * @param - t       :       要遍历的二叉树的指针
 * @return          :       无       
*/
void Post_order(btree_node_t *t)
{
    /* 树不为空 */
    if(NULL != t)
    {
        /* 1.后序遍历左子树 */
        Post_order(t->lchild);

        /* 2.后序遍历右子树 */
        Post_order(t->rchild);

        /* 3.访问根结点 */
        printf("%c  ",t->data);
    }
}

④.层次遍历算法

/**
 * @description:            二叉树的层次遍历算法
 * @param - t       :       要遍历的二叉树的指针
 * @return          :       无
*/
void Level_order(btree_node_t *t)
{
    linkqueue_t *q;         //链式队列

    /* 一.初始化一个链式队列 */
    q = Linkqueue_Create();

    /* 二.开始层次遍历 */
    while(t != NULL)
    {
        /* 1.访问 t 指向的结点数据 */
        printf("%c  ",t->data);

        /* 2.若 t 的左指针不为空 , 则入队 */
        if(t->lchild != NULL)
        {
            Linkqueue_In(q,t->lchild);
        }

        /* 3.当 t 的右指针不为空 , 则入队 */
        if(t->rchild != NULL)
        {
            Linkqueue_In(q,t->rchild);
        }

        /* 4.队列不为空 , 则出队 */
        if(!Linkqueue_is_empty(q))
            Linkqueue_Out(q,&t);
        else
            break;
    }
}

⑤.先序非递归遍历算法

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

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

相关文章

24-9-17-读书笔记(十八)-《契诃夫文集》(二)上([俄] 契诃夫 [译] 汝龙 )

文章目录 《契诃夫文集》(二)上([俄] 契诃夫 [译] 汝龙 )目录阅读笔记记录总结 《契诃夫文集》(二)上([俄] 契诃夫 [译] 汝龙 ) 中秋夜,最近有些忙,看书的进度…

【PHP代码审计】PHP常见配置解析

🌝博客主页:菜鸟小羊 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 php.ini配置文件 php函数禁用 disable_functions该选项可以设置哪些php函数是禁止使用的,重启生效&#xff0…

哪款宠物空气净化器能清除浮毛,希喂、米家、美的测评分享

要说市面上评价最为两极分化的家电产品,宠物空气净化器可以说是当仁不让了,几乎一半人说真香,另一半人却在吐槽鸡肋。 作为用过宠物空气净化器实测过市面上多个品牌多款宠物空气净化器产品的专业养宠测评博主,对宠物空气净化器这…

代码随想录:动态规划4-5

42.接雨水 题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,…

PyQt5-QCheckBox-开关按钮

效果预览 实现代码 from PyQt5.QtWidgets import QCheckBox, QApplication, QWidget, QVBoxLayout from PyQt5.QtCore import Qt, QRect, QPropertyAnimation, QEasingCurve, pyqtProperty from PyQt5.QtGui import QPainter, QColor, QPen, QFontclass CompactSwitchCheckbox…

PostgreSQL维护——解决索引膨胀和数据死行

注意: 本文内容于 2024-09-16 00:40:33 创建,可能不会在此平台上进行更新。如果您希望查看最新版本或更多相关内容,请访问原文地址:PostgreSQL维护——解决索引膨胀和数据死行。感谢您的关注与支持! 我有一张表&#…

Python3网络爬虫开发实战(17)爬虫的管理和部署(第一版)

文章目录 一、 Scrapyd 分布式部署1.1 了解 Scrapyd1.2 准备工作1.3 访问 Scrapyd1.4 Scrapyd 的功能1.5 ScrapydAPI 的使用 二、Scrapyd-Client 的使用2.1 准备工作2.2 Scrapyd-Client 的功能2.3 Scrapyd-Client 部署 三、Scrapyd 对接 Docker3.1 准备工作3.2 对接 Docker 四、…

一款自动对杂乱文件进行整理和分类的AI工具--FileNeatAI

不知道大家有没有这样的痛点,面对自己的下载目录或者文档目录,总是下载了一堆文件,当某天看着这些文件夹想整理和分类的时候,又或者自己工作的时候,面对一堆工作上的文件,却不知道该分在那个分类里&#xf…

时序约束进阶三:Create_clock与Create_Generated_Clock详解

目录 一、前言 二、生成时钟 2.1 示例设计 2.2 主时钟约束 1)约束对象解析 2)约束到非时钟位置 2.3 生成时钟约束 1)无约束 2)倍频约束 3)生成时钟的主时钟约束不正确 4)使能时钟控制的约束 5&…

CI/CD持续集成和持续交付(git工具、gitlab代码仓库、jenkins)

目录 一 CICD是什么 1.1 持续集成(Continuous Integration) 1.2 持续部署(Continuous Deployment) 1.3 持续交付(Continuous Delivery) 二 git工具使用 2.1 git简介 2.2 git 工作流程 三 部署git …

[数据集][目标检测]车窗状态检测车窗开关检测数据集VOC+YOLO格式299张3类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):299 标注数量(xml文件个数):299 标注数量(txt文件个数):299 标注类别…

动态规划:07.路径问题_珠宝的最大价值_C++

题目链接:LCR 166. 珠宝的最高价值 - 力扣(LeetCode)https://leetcode.cn/problems/li-wu-de-zui-da-jie-zhi-lcof/description/ 一、题目解析 题目: 解析: 有过做前几道题的经验,我们会发现这道题其实就…

OpenAI o1——人工智能推理能力的飞跃,助力高级问题解决

前言 开放人工智能 新模型, OpenAI o1 或草莓,代表了 人工智能。它以 OpenAI 的 GPT 系列等先前模型为基础,并引入了增强的推理能力,从而加深了科学、编码和数学等各个领域的问题解决能力。与主要擅长处理和生成文本的前辈不同&a…

如何在win10Docker安装Mysql数据库?

1.拉取镜像 docker pull mysql 2.查看镜像 使用以下命令来查看是否已安装了 mysql镜像。 3.运行镜像 命令: docker run -p 3306:3306 --name mysql --restartalways --privilegedtrue \ -v /usr/local/mysql/log:/var/log/mysql \ -v /usr/local/mysql/data:/var…

AE电源HPG13150 400V Generator 手侧

AE电源HPG13150 400V Generator 手侧

【模板代码的组织结构与模板的显式实例化和声明】模板代码的组织结构与模板的显式实例化和声明

一、模板的组织结构 之前对于模板,我们都是写在同一个 . c p p .cpp .cpp文件下,那如果我们将模板分开,单独开一个 . h .h .h和 . c p p .cpp .cpp来创建模板,会发生什么? 首先,我们创建一个 m y c l a s…

适合骑行的开放式耳机哪个品牌好?四款开放式蓝牙耳机推荐

骑行时是否有必要佩戴耳机是一个需要权衡安全与便利的问题。因为虽然耳机能提供音乐、导航等功能,但也可能分散注意力,影响骑行安全。而且这也是需要看个人需求决定的,骑行戴耳机的需求是什么,我想大部分人应该就是为了接听电话&a…

大端存储与小端存储的存储方式

目录 1.小端存储方式的解释 2.大端存储方式的解释 3.百度笔试题--判断大端存储还是小端存储 小心!VS2022不可直接接触,否则!没这个必要,方源面色淡然一把抓住!顷刻炼化! 1.小端存储方式的解释 小端存储…

DeDeCMS靶场漏洞复现

打开靶场地址 姿势一:通过文件管理器上传webshell 1.登录后台 dedecms默认的后台登录地址为/dede 2.在附加管理里的文件式管理器中有文件上传 3.上传木马文件 4.访问木马文件 并连接 姿势二:修改模板文件获取webshell 1.点击模板里面的默认模板管理 …

【2025】智慧居家养老服务平台的设计与实现、基于AI的居家养老服务平台、居家养老服务平台开发、智慧养老服务平台设计

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…