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

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;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 学习bat脚本
  • 自然语言处理系列四十七》Elasticsearch搜索引擎》Elasticsearch代码实战
  • 川崎机器人维修请开启马达电源报警故障
  • 使用Lora微调LLM——笔记
  • okhttp异步请求连接阻塞问题排查
  • cenos 7 安装 golang
  • vue3 自定义hooks(组合式函数)
  • PHP语言有哪些优势和特点?
  • C——四种排序方法
  • 84、 k8s的pod基础+https-harbor
  • 行级安全的艺术:SQL中的精细化数据保护策略
  • C++中类的相关学习
  • Golang 教程2
  • NoSql数据库 Redis集群详解
  • 如何使用 Pytest 进行测试
  • [nginx文档翻译系列] 控制nginx
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 03Go 类型总结
  • Apache Zeppelin在Apache Trafodion上的可视化
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • mysql_config not found
  • Netty源码解析1-Buffer
  • Python爬虫--- 1.3 BS4库的解析器
  • web标准化(下)
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 编写符合Python风格的对象
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 反思总结然后整装待发
  • 关于Java中分层中遇到的一些问题
  • 前端攻城师
  • 前端自动化解决方案
  • 带你开发类似Pokemon Go的AR游戏
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • (1)Jupyter Notebook 下载及安装
  • (2015)JS ES6 必知的十个 特性
  • (二)斐波那契Fabonacci函数
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • (三十)Flask之wtforms库【剖析源码上篇】
  • (微服务实战)预付卡平台支付交易系统卡充值业务流程设计
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)【Hibernate总结系列】使用举例
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • *算法训练(leetcode)第四十五天 | 101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104. 建造最大岛屿
  • .gitignore文件_Git:.gitignore
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .net core控制台应用程序初识
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .NET单元测试使用AutoFixture按需填充的方法总结
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .Net中间语言BeforeFieldInit
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?