Linux 数据结构 树知识

news2024/9/23 21:22:35

                                                                                                                                                               树:只有一个前驱,但是可以有多个后继
    根节点:最顶层节点(没有前驱)
    分支节点:有前驱也有后继
    叶子节点:没有后继的节点
    层:根节点所在为第一层,每过一个分支节点,层数+1 
    深度: 从根节点出发到达节点的分支节点个数称为该节点的深度
    高度:从叶子节点出发到该节点最大的节点个数称为该节点的高度

    树的高度:整个树形结构中高度最高的节点的高度称为树的高度
    树的深度:整个树形结构中深度最深的节点的深度称为树的深度
    树的层数 == 树的高度 == 树的深度

    节点的度: 叶子节点度数为0 
              节点的后继的个数
    多个树构成森林
    
二叉树:
    所有节点中最大度数为2的树形结构

    左孩子
    右孩子

    满二叉树:满二叉树是一种特殊的二叉树,其中每个层级的节点数都是最大值,即每个层级都是完全填充的
    完全二叉树:所有节点展开后,节点编号排列连续

    二叉树特点:叶子节点、只有左孩子、只有右孩子、左右孩子都有
    满二叉树:二叉树第k层最多有2^(k-1)个节点 
             满二叉树有k层,则所有节点数为 2^k -1

//二叉树节点类型 
typedef struct node 
{
    int No;
    char Data;
    struct node *pLeftChild;
    struct node *pRightChild;
}TreeNode;

//队列数据
typedef struct data
{
    struct list_head node;
    TreeNode *pData;
}Data_t;
//创建完全二叉树
TreeNode *CreateCompleteTree(int StartNo, int EndNo)
{
    TreeNode *pTmpNode = NULL;

    pTmpNode = malloc(sizeof(TreeNode));
    if (NULL == pTmpNode)
    {
        return NULL;
    }

    pTmpNode->pLeftChild = pTmpNode->pRightChild = NULL;

    pTmpNode->No = StartNo;
    if (2 * StartNo <= EndNo)
    {
        pTmpNode->pLeftChild = CreateCompleteTree(2*StartNo, EndNo);
    }
    if (2 * StartNo + 1 <= EndNo)
    {
        pTmpNode->pRightChild = CreateCompleteTree(2*StartNo+1, EndNo);
    }

    return pTmpNode;
}

    二叉树的三种遍历方法:
    1.前序遍历:根左右

利用队列和递归,实现遍历

int PreOrderBinTree(TreeNode *pRoot)
{
    printf("%c ", pRoot->Data);
    if (pRoot->pLeftChild != NULL)
    {
        PreOrderBinTree(pRoot->pLeftChild);
    }
    if (pRoot->pRightChild != NULL)
    {
        PreOrderBinTree(pRoot->pRightChild);
    }
    
    return 0;
}


    2.中序遍历:左根右

int InOrderBinTree(TreeNode *pRoot)
{
    if (pRoot->pLeftChild != NULL)
    {
        InOrderBinTree(pRoot->pLeftChild);
    }
    
    printf("%c ", pRoot->Data);

    if (pRoot->pRightChild != NULL)
    {
        InOrderBinTree(pRoot->pRightChild);
    }
    
    return 0;
}


    3.后续遍历:左右根

int PostOrderBinTree(TreeNode *pRoot)
{
    if (pRoot->pLeftChild != NULL)
    {
        PostOrderBinTree(pRoot->pLeftChild);
    }

    if (pRoot->pRightChild != NULL)
    {
        PostOrderBinTree(pRoot->pRightChild);
    }

    printf("%c ", pRoot->Data);

    return 0;
}

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

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

相关文章

【uniapp 解决h5 uni.saveFile 不生效】2种方法解决

用uni.saveFile h5报错 saveFile API saveFile is not yet implemented 查看文档发现不支持h5 解决方法&#xff1a; 这个我用了pc 端一样的方法用a标签来下载保存代码如下&#xff1a; 第一种&#xff1a; const a document.createElement(a);a.href filePath; //filePath …

sqli-labs靶场通关攻略(51-60)

Less-51 1、判断闭合方式 输入?sort1 -- 页面闭合成功 2、查询数据库 输入?sort-1 and updatexml(1,concat(1,database()),1) -- 3、查询数据库中的表 输入?sort-1 and updatexml(1,concat(1,(select group_concat(table_name) from information_schema.tables where …

北京青蓝智慧科技2024数博会:共谋数字经济新篇章

在数字化的浪潮下&#xff0c;大数据企业如雨后春笋般涌现&#xff0c;而应用场景更是无处不在。 伴随着“数博十年”的盛约&#xff0c;新老朋友纷纷涌向贵阳国际会议展览中心&#xff0c;于8月28-30日共襄盛举。 2024中国国际大数据产业博览会&#xff08;简称“数博会”&a…

Django国际化和本地化

【图书介绍】《Django 5企业级Web应用开发实战&#xff08;视频教学版&#xff09;》_django 5企业级web应用开发实战(视频教学版)-CSDN博客 《Django 5企业级Web应用开发实战&#xff08;视频教学版&#xff09;》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com) 本节主要介…

一个最基本的多线程3D渲染器方案

概括 渲染器仍然是大多数现代视频游戏的主要组件。通常&#xff0c;这些流水线通过 3D 图形应用程序接口&#xff08;如 DirectX、OpenGL &#xff09;暴露出来。现代&#xff0c;多核 CPU 已广泛应用于游戏机和个人电脑。为了确保 GPU 能持续不断地处理数据&#xff0c;渲染器…

惠中科技RDS自清洁膜层:光伏行业的清洁革命与创新先锋

在当今全球能源转型和光伏产业蓬勃发展的背景下&#xff0c;光伏电站的运营维护面临着诸多挑战&#xff0c;其中灰尘污染问题尤为突出。灰尘的堆积不仅降低了光伏板的透光率&#xff0c;还直接影响了电站的发电效率和经济效益。为了有效解决这一难题&#xff0c;惠中科技凭借其…

C++日期差值问题(2个日期之间差几天)

上面是牛客网给出的题目。 思路 假设第一个输入的日期为2011 12 03&#xff0c;第二个输入的日期为2024 02 29。 这两个日期并不相等&#xff0c;我们可以让日期2011 12 03一直加1&#xff0c;直到等于2024 02 29为止。 在这个过程中&#xff0c;每1一次&#xff0c;就让re…

情感共鸣:数业智能心大陆重塑AI心理交互新纪元

在科技蓬勃发展的今天&#xff0c;人工智能如同一张大网&#xff0c;与我们的生活密切交织&#xff0c;在多个层面深刻影响着每一个人。而数业智能心大陆&#xff0c;作为 “AI 心理健康” 领域的佼佼者&#xff0c;正以其独特的技术和创新理念&#xff0c; 为人工智能与用户的…

企业EMS - 能源管理系统 - 能源管理系统源码-能源在线监测平台-双碳平台源码

一、介绍 企业EMS - 能源管理系统 - 能源管理系统源码-能源在线监测平台-双碳平台源码’ 二、软件架构 二、功能介绍 三、数字大屏展示 四、数据采集原理 五、软件截图

C++ 有向图算法

概念 Breadth-First Search (BFS) 目的: 主要用于遍历或搜索图中的所有顶点。 特点: 从根节点开始&#xff0c;先访问所有与之相邻的节点&#xff0c;然后再一层一层地深入。 应用: 可以用来寻找两节点间的最短路径&#xff08;当边的权重相等时&#xff09;&#xff0c;检测…

笔记:应用Visual Studio Profiler分析CPU使用情况

一、目的&#xff1a;应用Visual Studio Profiler分析CPU使用情况 使用 Visual Studio Profiler 分析 CPU 使用情况可以帮助你识别性能瓶颈&#xff0c;优化代码&#xff0c;提高应用程序的响应速度。 二、实现 以下是如何使用 Visual Studio Profiler 分析 CPU 使用情况的详…

前端问答:如何判断变量是否为数组?

在JavaScript的世界里&#xff0c;判断一个变量的类型是开发者日常工作中不可或缺的一部分&#xff0c;尤其是在处理数组这种关键数据结构时。数组作为一种广泛应用于各种操作的数据结构&#xff0c;无论是简单的数据存储还是复杂的算法实现&#xff0c;都发挥着重要作用。然而…

力扣刷题--762. 二进制表示中质数个计算置位【简单】

题目描述&#x1f357; 给你两个整数 left 和 right &#xff0c;在闭区间 [left, right] 范围内&#xff0c;统计并返回 计算置位位数为质数 的整数个数。 计算置位位数 就是二进制表示中 1 的个数。 例如&#xff0c; 21 的二进制表示 10101 有 3 个计算置位。 示例 1&am…

【JPCS独立出版】2024电驱系统与控制工程国际学术研讨会(EDSCE 2024,10月18-20)

2024电驱系统与控制工程国际学术研讨会&#xff08;EDSCE 2024&#xff09;将于2024年10月18-20日在中国本溪隆重举行。 本次会议将集中讨论电驱系统与控制工程的最新研究成果&#xff0c;旨在建立一个高水平的学术交流平台&#xff0c;以便领域内的专家学者、工程师和技术研发…

【单片机原理及应用】实验: 8位数码显示器

目录 一、实验目的 二、实验内容 三、实验步骤 四、记录与处理 五、思考 六、成果文件提取链接 一、实验目的 学习8位数码管串行扩展原理&#xff0c;掌握74HC595与动态显示编程方法。 二、实验内容 【参照图表】 &#xff08;1&#xff09;创建一个包含80C51固件&#x…

如何选择适合企业的财税自动化解决方案

财税自动化解决方案是现代企业提升财务管理效率、降低运营成本的关键工具。然而&#xff0c;市场上的财税自动化产品琳琅满目&#xff0c;功能各异&#xff0c;企业在选择时常常感到困惑。本文金智维将从中小型的需求出发&#xff0c;帮助企业了解如何选择适合自身的财税自动化…

ASP.NET Core6.0-wwwroot文件夹无法访问解决方法

默认情况下&#xff0c;ASP.NET Core项目中的wwwroot文件夹被视为Web根文件夹。静态文件可以存储在Web根目录下的任何文件夹中&#xff0c;并可以使用该根目录的相对路径进行访问。在ASP.NET应用程序中&#xff0c;可以从应用程序的根文件夹或其下的任何其他文件夹提供静态文件…

数据分析学习之numpy

引言 好久没写帖子了&#xff0c;确实变懒了&#xff0c;在这一个月里学习了爬虫&#xff0c;还有seleium自动化技术初步以及数据分析中的numpy&#xff0c;下一步就要学习pandas,但是欠了太多帖子没写&#xff0c;所以现在来补一下&#xff0c;现在来的是numpy的学习&#xff…

Java面试宝典-java基础07

Java面试宝典-java基础07 61、什么是 java 序列化&#xff1f;什么情况下需要序列化&#xff1f;62、序列化使用场景有哪些&#xff1f;63、使用序列化和反序列化的注意事项64、为什么要使用克隆&#xff1f;如何实现对象克隆&#xff1f;深拷贝和浅拷贝区别是什么&#xff1f;…

计算机网络概述(分组延时、丢失和吞吐量)

目录 分组丢失和延时是怎样发生的&#xff1f; 四种分组延时 节点延时 排队延迟 分组丢失 吞吐量 吞吐量&#xff1a;互联网场景 分组丢失和延时是怎样发生的&#xff1f; 在路由器缓冲区的分组队列 分组到达链路的速率超过了链路输出的能力分组等待排队到队头、被传输…