首页 > 系统相关 >Linux 数据结构 树知识

Linux 数据结构 树知识

时间:2024-08-30 22:53:04浏览次数:7  
标签:pLeftChild NULL 知识 pRoot pRightChild 二叉树 Linux 数据结构 节点

                                                                                                                                                               树:只有一个前驱,但是可以有多个后继
    根节点:最顶层节点(没有前驱)
    分支节点:有前驱也有后继
    叶子节点:没有后继的节点
    层:根节点所在为第一层,每过一个分支节点,层数+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;
}

标签:pLeftChild,NULL,知识,pRoot,pRightChild,二叉树,Linux,数据结构,节点
From: https://blog.csdn.net/mxyzhy/article/details/141725713

相关文章

  • 一个linux服务器安装多个java版本,如何选择指定的 java版本去执行
    linux中有时候可能你由于不同的项目需要使用不同版本的javajdk部署,你就需要在你的linux服务中安装很多个版本的javajdk,那么在linux中如何安装和使用不同版本的javajdk呢?1.安装第一个javajdk版本:到java官网下载一个javajdk版本,并解压,然后配置环境变量。javajdk地址:wge......
  • python的py文件 如何在window和linux系统中 使用命令的方式执行 接收json参数 两者的
    1.在Python中,可以使用内置的sys模块来在Windows和Linux系统中接收命令行参数。使用sys.argv,它是一个列表,包含命令行参数。sys.argv[0]是脚本名,其余元素是命令行参数。示例代码:importsys#检查参数个数iflen(sys.argv)<2:print("请提供至少一个参数。")sys.......
  • 【Linux】Linux系统性能调优技巧
    目录一、Linux系统性能指标二、Linux系统性能调优技巧2.1 保持系统更新2.2磁盘I/O性能优化2.3内存管理调整2.4关闭不必要的服务2.5进程资源限制2.6网络性能调整2.7监控和分析工具        2.8编译器优化2.9预读取和写入缓存2.10内核参数调整2.11......
  • 用c++以数组的形式实现栈的数据结构
    #include<iostream>usingnamespacestd;//设置数组的最大值#define MaxSize100intA[MaxSize];//栈顶inttop=-1;//入栈voidpush(intx){  //处理溢出的情况  if(top==MaxSize-1){    cout<<"stackoverflow"<<endl;    return; ......
  • Redis基础知识学习笔记(一)
    文章目录Redis简介Redis简介REmoteDIctionaryServer(Redis)是一个由SalvatoreSanfilippo写的key-value存储系统,是跨平台的非关系型数据库,其是一个开源的使用ANSIC语言编写、遵守BSD协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)......
  • Linux磁盘挂载
    Linux磁盘挂载硬盘分区表硬盘分区表是存储在硬盘上的一种数据结构,它定义了硬盘上各个分区的位置、大小、类型和其他属性。硬盘分区表是操作系统识别和管理硬盘分区的基础,它对于硬盘的使用和维护起到关键作用。分区表类型主要有两种类型的硬盘分区表MBR(MasterBootReco......
  • Linux常用命令练习二
    目录练习一练习二练习三练习一1.在用户的家目录下创建目录文件dir1和普通文件file12.在家目录下给dir1目录嵌套创建dir1/dir2/dir3/dir4/dir53.在家目录下直接一步进入到dir4里面4.在dir4目录中将家目录下的file1移动到上一级的dir3中5.在dir4目录下创建一......
  • 【Linux】开源的系统监控和故障排除工具Sysdig:用于系统监控、故障排除和安全审计,从下
    Sysdig是一个开源的系统监控和故障排除工具,可以捕获和分析系统调用,帮助你深入了解系统的运行状态。无论是开发人员、运维工程师还是安全专家,Sysdig都是进行系统监控、故障排除和安全审计的理想工具。本文将详细介绍Sysdig的安装、基本使用方法以及一些高级用法,并通过具......
  • 数据结构与算法 第四天(串、数组、广义表)
    串(String)任意字符组成的有限序列串的类型定义串的顺序存储结构模式匹配算法确定主串所含字串第一次出现的位置。BF算法穷举法,从每个字符开始依次匹配KMP算法链式存储数组基本操作特殊矩阵存储对称矩阵三角矩阵对角矩阵稀疏矩阵超过95%元素为零......
  • 数据结构-了解树和二叉树
    一、了解树1.树的基本概念树是一种非线性数据结构,主要用于表示层次关系。它由节点和连接这些节点的边组成。树的形状像一棵倒立的树,根部在上,树枝向下延伸。2.树的定义树可以定义为一个空树或由以下性质的节点组成的非空集合:空树:没有任何节点的树。非空树:包含一个根节点......