【数据结构】树的基础入门

这篇具有很好参考价值的文章主要介绍了【数据结构】树的基础入门。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是树

相信大家刚学数据结构的时候最先接触的就是顺序表,栈,队列等线性结构.
而树则是一种非线性存储结构,存储的是具有“一对多”关系的数据元素的集合

非线性 体现在它是由n个有限结点(可以是零个结点)组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的
一对多 体现在比如对图中A来说,A对于和B,C都存在联系,同理B,C与其他的也均存在关系

【数据结构】树的基础入门,数据结构,数据结构,c语言,c++,开发语言,学习

树的常见术语

节点的度:一个节点含有的子树的个数称为该节点的度(上图A的为2)
叶节点/终端节点:度为0的节点称为叶节点(上图DEFGH节点为叶节点)
非终端节点/分支节点:度不为0的节点,(上图A,B,C)
双亲节点/父节点:若一节点含有子节点,此节点称为其子节点的父节点(上图A是B的父节点)
孩子节点或子节点:一节点含有的子树的根节点称为该节点的子节点(上图B是A的孩子节点)
兄弟节点:具有相同父节点的节点互称为兄弟节点(B、C是兄弟节点)
树的度:一棵树中,最大的节点的度称为树的度(上图B的度最大,故树的度为3)
堂兄弟节点:双亲在同一层的节点互为堂兄弟(如上图D,E互为兄弟节点)
节点的祖先:从根到该节点所经分支上的所有节点(上图A是所有节点的祖先)
子孙:以某节点为根的子树中任一节点都称为该节点的子孙(上图所有节点都是A的子孙)
森林:由n(n>0)棵互不相交的树的集合称为森林

此外,另有两个术语需要单独讨论一下,即

节点的层次:从根开始定义起,有两种说法
①根为第1层,根的子节点为第2层…
②根为第0层,根的子节点为第1层…
树的高度或深度:树中结点的最大层次



比如,只有一个节点,A是第0层,也可以说是第1层,两者都是正确的
但是我更推荐说A是第1层,因为如果A是第0层,高度或深度就为0,
那么对于空树来说,它就只能是-1层,显然不合理
那么如果A是第1层,高度或深度就为1;而空树的高度或深度就为0了,个人认为这种安排更加合理



【数据结构】树的基础入门,数据结构,数据结构,c语言,c++,开发语言,学习

树的表示

树有很多种表示方式如:双亲表示法,孩子表示法、孩子双亲表示法以及孩子兄弟表示法等.

首先我们来看一种比较差的表示

struct TreeNode
{
	int val;
	struct  TreeNode* child1;
	struct  TreeNode* child2;
	struct  TreeNode* child3;
	//...
};    //缺点很明显,浪费空间,对于度只有1或0的节点就会浪费结构体内的空间

//或者稍微改进一下
struct TreeNode
{
	int val;
	struct  TreeNode* childArray[5];
};  //同理,如果没有5个孩子的节点也会浪费空间

现在介绍一种非常常用且厉害的方法: 孩子兄弟表示法

struct TreeNode
{
	int val;
	struct  TreeNode* firstChild;
	struct  TreeNode* brother;
};    

此方法的思路流程如下:(链表)
【数据结构】树的基础入门,数据结构,数据结构,c语言,c++,开发语言,学习

再比如 双亲表示法:只存在父亲节点的指针或者下标

#define size 100//树中结点的最大数量
#define dataType int//树结构中数据类型
//节点
typedef struct TreeNode{
    dataType data;//树中结点的数据类型
    int parent;//它的父结点在数组中的位置下标
}TreeNode;
//树结构:  (上面的方法没有写这个树结构是因为上面是本质是链表,而这里是数组)
typedef struct {
    PTNode nodes[size];//存放树中所有结点
    int r,nums;//根的位置下标和结点数
}Tree;

逻辑思路如下(数组)
【数据结构】树的基础入门,数据结构,数据结构,c语言,c++,开发语言,学习

树的应用

1.文件系统:计算机的文件系统通常采用树形结构来组织文件和目录。根节点是文件系统的根目录,每个目录可以包含子目录和文件,这种结构可以方便地组织和访问文件。
2.数据库索引:数据库中的索引通常使用B树或B+树这样的树形结构来实现。树的节点包含关键字和指向其他节点的指针,可以快速地搜索和访问数据库中的数据。
3.解析树:编译器常使用树形结构来表示程序的语法结构。每个节点代表一个语法规则或语句,子节点表示该语句的组成部分,这种结构可以方便地进行语法分析和代码生成。

:这只是树形结构在实际中的一部分应用,它的灵活性和易于理解性使其成为许多领域中常用的数据结构。文章来源地址https://www.toymoban.com/news/detail-704586.html

到了这里,关于【数据结构】树的基础入门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构入门】-二叉树的基本概念

    个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【数据结构初阶(C实现)】 今天的内容可是一个大头,比以往学的内容上了一个档次。大家对于这块内容一定要好好学,不是很理解的地方一定要及时解决,要不然到

    2023年04月10日
    浏览(74)
  • 二叉树的实现(C语言数据结构)

    目录 一、以下是我们需要实现的功能 二、以下是我们具体功能的实现 1.创建新的结点 2.通过数组生成二叉树  3.先序遍历 4.中序遍历 5.后序遍历   6.层序遍历 7.计算二叉树的结点个数 8.查找指定值为x的结点 9.查找第K层的结点个数 10.统计二叉树叶子结点的个数 11.判断是否为

    2024年02月04日
    浏览(28)
  • 【C语言 数据结构】二叉树的遍历

    所谓先序遍历二叉树,指的是从根结点出发,按照以下步骤访问二叉树的每个结点: 访问当前结点; 进入当前结点的左子树,以同样的步骤遍历左子树中的结点; 遍历完当前结点的左子树后,再进入它的右子树,以同样的步骤遍历右子树中的结点; 先序遍历这棵二叉树的过

    2024年02月04日
    浏览(33)
  • 树的引进以及二叉树的基础讲解——【数据结构】

                                     W...Y的主页 😊 代码仓库分享  💕 当我们学习完前面的数据结构,难度也就会上升,但是这个也是非常重要的数据结构。今天我们来学习一种新的数据类型——树。 目录 树的概念以及结构 树的概念 树的相关概念 树的表示

    2024年02月07日
    浏览(29)
  • 【数据结构】——二叉树的基础知识

    数的分类 二叉树、多叉树 数的概念 树是一种 非线性 的数据结构,它是由n(n=0)个有限节点组成一个具有层次关系的集合。 把它叫做树的原因是它看起来像一颗倒挂的树,也就是说它是跟朝上,而叶朝下的。 有一个特殊的节点,称为根节点,这个节点没有前驱节点。 除根节

    2024年02月07日
    浏览(34)
  • 【数据结构】树的基础知识及三种存储结构

    💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃 个人主页 :阿然成长日记 👈点击可跳转 📆 个人专栏: 🔹数据结构与算法🔹C语言进阶 🚩 不能则学,不知则问,耻于问人,决无长进 🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉 🍓 🍑 🍈 🍌 🍐 🍍 把它叫做树是因为它

    2024年02月09日
    浏览(39)
  • 【数据结构入门】二叉树的遍历(前序、中序、后序、层序)

    个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【数据结构初阶(C实现)】 什么是二叉树遍历: 二叉树遍历就是按照某种特定的规则,依次堆二叉树中的结点进行相应的操作,并且 每个结点只操作一次 。访问结点

    2023年04月09日
    浏览(30)
  • 【初阶数据结构】树结构与二叉树的基础概念

    君兮_的个人主页 勤时当勉励 岁月不待人 C/C++ 游戏开发 Hello,米娜桑们,这里是君兮_,今天带来数据结构里的重点内容也是在笔试,面试中的常见考点——树与二叉树,其中二叉树又分为很多种,我们先来讲讲基础的内容带大家一步步入门 在介绍二叉树之前,我们得先知道什

    2024年02月08日
    浏览(31)
  • 数据结构—基础知识(11):二叉树的遍历

    二叉树的遍历 是指按某条搜索路径访问树中每个结点,使得每个结点均被访问一次,而且仅被访问一次。由于二叉树是一种非线性结构,每个结点都可能有两棵子树,因而需要寻找一种规律,以便使二叉树上的结点能排列在一个线性队列上,进而便于遍历。 由二叉树的递归

    2024年02月19日
    浏览(36)
  • C语言数据结构初阶(10)----二叉树的实现

    · CSDN的uu们,大家好。这里是C语言数据结构的第十讲。 · 目标:前路坎坷,披荆斩棘,扶摇直上。 · 博客主页: @姬如祎 · 收录专栏: 数据结构与算法     目录 1. 函数接口一览 2. 函数接口的实现 2.1 BTNode* BuyNode(BTDataType x) 的实现 2.2 BTNode* CreateTree() 的实现  2.3 void

    2023年04月08日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包