树和二叉树的相关概念及结构

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

树和二叉树的相关概念及结构,数据结构,数据结构,树的概念,二叉树的概念及性质,二叉树存储结构

目录

1.树的概念及结构

1.1 树的概念

1.2 树的相关概念

1.3 树的表示

1.3.1 孩子兄弟表示法

1.3.2 双亲表示法

1.4 树的实际应用

2.二叉树的概念及结构

2.1 二叉树的概念

2.2 特殊的二叉树

2.3 二叉树的性质

2.4 二叉树的存储

2.4.1 顺序存储

2.4.2 链式存储


1.树的概念及结构

1.1 树的概念

树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。

  • 有一个特殊的结点,称为根结点,根节点没有前驱结点
  • 除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1<= i<= m)又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继
  • 因此,树是递归定义的

1.2 树的相关概念

树和二叉树的相关概念及结构,数据结构,数据结构,树的概念,二叉树的概念及性质,二叉树存储结构

节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:A的为6
叶节点或终端节点:度为0的节点称为叶节点; 如上图:B、C、H、I...等节点为叶节点
非终端节点或分支节点:度不为0的节点; 如上图:D、E、F、G...等节点为分支节点
双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点; 如上图:A是B的父节点
孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点; 如上图:B是A的孩子节点
兄弟节点:具有相同父节点的节点互称为兄弟节点; 如上图:B、C是兄弟节点
树的度:一棵树中,最大的节点的度称为树的度; 如上图:树的度为6
节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;
树的高度或深度:树中节点的最大层次; 如上图:树的高度为4
堂兄弟节点:双亲在同一层的节点互为堂兄弟;如上图:H、I互为兄弟节点
节点的祖先:从根到该节点所经分支上的所有节点;如上图:A是所有节点的祖先
子孙:以某节点为根的子树中任一节点都称为该节点的子孙。如上图:所有节点都是A的子孙
森林:由m(m>0)棵互不相交的树的集合称为森林;​

1.3 树的表示

树结构相对线性表就比较复杂了,要存储表示起来就比较麻烦了,既然保存值域,也要保存结点和结点之间的关系。

我们先看下面两种存储方式:

//方式1
struct TreeNode
{
    int val;
    struct TreeNode* child1;
    struct TreeNode* child2;
    struct TreeNode* child3;
    struct TreeNode* child4;
    //...
}
//方式二
#define N 3   //N是树的度

struct TreeNode
{
   int val;
   struct TreeNode* childArr[N];
}

显然上面两种方式都存在一定缺陷:

结点的度不固定,方式一就不能使用;方式二的指针数组有可能存在空间浪费。

1.3.1 孩子兄弟表示法

在所有表示方法中,有一个最优解,那就是孩子兄弟表示法。

typedef int DataType;

struct Node
{
    struct Node* firstChild; // 第一个孩子结点
    struct Node* nextBrother; // 指向其下一个兄弟结点
    DataType data; // 结点中的数据域
};

孩子是第一个孩子,兄弟是下一个兄弟。

树和二叉树的相关概念及结构,数据结构,数据结构,树的概念,二叉树的概念及性质,二叉树存储结构

这个最优解还可以遍历树中某个结点的所有孩子:

TreeNode* Node;
TreeNode* child = Node->firstChild;
while(child)
{
    printf("%d ", child->val);
    child = child->nextBrother;
}

1.3.2 双亲表示法

树和二叉树的相关概念及结构,数据结构,数据结构,树的概念,二叉树的概念及性质,二叉树存储结构

  • 双亲表示法用一个数组存储双亲的下标或者指针。
  • 根结点双亲的下标默认为-1。
  • 判断两个节点是否在同一棵树:找根,是同一个根就在同一棵树。

1.4 树的实际应用

文件系统的目录树结构:

树和二叉树的相关概念及结构,数据结构,数据结构,树的概念,二叉树的概念及性质,二叉树存储结构

2.二叉树的概念及结构

2.1 二叉树的概念

一棵二叉树是结点的一个有限集合,该集合:

  1. 或者为空
  2. 由一个根节点加上两棵别称为左子树和右子树的二叉树组成

树和二叉树的相关概念及结构,数据结构,数据结构,树的概念,二叉树的概念及性质,二叉树存储结构

注意:

  • 二叉树并不是所有的结点的度都为2,而是所有结点的度最大为2。
  • 二叉树的左右子树不能颠倒,是一个有序树。
  • 对于任意的二叉树都是由以下几种情况复合而成的:​

树和二叉树的相关概念及结构,数据结构,数据结构,树的概念,二叉树的概念及性质,二叉树存储结构

2.2 特殊的二叉树

  1. 满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是 ,则它就是满二叉树。
  2. 完全二叉树:完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树。

树和二叉树的相关概念及结构,数据结构,数据结构,树的概念,二叉树的概念及性质,二叉树存储结构

2.3 二叉树的性质

  1. 若规定根节点的层数为1,则一棵非空二叉树的第i层上最多有2^(i-1)​ 个结点.
  2. 对任何一棵二叉树, 如果度为0其叶结点个数为n0 , 度为2的分支结点个数为n2 ,则有 n0=n2 +1
  3. 对于一颗完全二叉树,度为1的结点最多只有1个
  4. 若规定根节点的层数为1,则深度为h的二叉树的最大结点数是 2^h​-1(满二叉树)
  5. 若规定根节点的层数为1,具有n个结点的满二叉树的深度,h= log(n+1)(ps: 是log以2为底)
  6. 高度为h的完全二叉树的结点个数范围:[2^(h-1) , 2^h-1]
  7. 结点个数为n的完全二叉树的高度:logn向下取整再加1 或者 log(n+1)向上取整
  8. 对于具有n个结点的完全二叉树,如果按照从上至下从左至右的数组顺序对所有节点从0开始编号,则对
    于序号为i的结点有:

若i>0,i位置节点的双亲序号:(i-1)/2;i=0,i为根节点编号,无双亲节点

若2i+1<n,左孩子序号:2i+1;若2i+1>=n, 无左孩子

若2i+2<n,右孩子序号:2i+2;若2i+2>=n, 无右孩子

2.4 二叉树的存储

二叉树一般可以使用两种结构存储,一种顺序结构,一种链式结构。

2.4.1 顺序存储

顺序结构存储就是使用数组来存储,一般使用数组只适合表示完全二叉树,因为不是完全二叉树会有空间的浪费。而现实中使用中只有堆才会使用数组来存储。二叉树顺序存储在物理上是一个数组,在逻辑上是一颗二叉树。

树和二叉树的相关概念及结构,数据结构,数据结构,树的概念,二叉树的概念及性质,二叉树存储结构

2.4.2 链式存储

二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。 通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址 。链式结构又分为二叉链和三叉链。

树和二叉树的相关概念及结构,数据结构,数据结构,树的概念,二叉树的概念及性质,二叉树存储结构文章来源地址https://www.toymoban.com/news/detail-709093.html

typedef char BTDataType;
 
//二叉链表
typedef struct BinaryTreeNode
{
	BTDataType data;
	struct BinaryTreeNode* left;
	struct BinaryTreeNode* right;
}BTNode;
 
//三叉链表
typedef struct BinaryTreeNode
{
	BTDataType data;
	struct BinaryTreeNode* parent;
	struct BinaryTreeNode* left;
	struct BinaryTreeNode* right;
}BTNode;

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

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

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

相关文章

  • 初级数据结构(五)——树和二叉树的概念

        文中代码源文件已上传:数据结构源码  -上一篇 初级数据结构(四)——队列        |        初级数据结构(六)——堆 下一篇-         自然界中的树由根部开始向上生长,随机长出分支,分支之上又可长出分支,层层递进,直至长出叶子则此分支结束。   

    2024年02月04日
    浏览(47)
  • 【数据结构】——树和二叉树相关概念(全网超级详解)

       创作不易,家人们来一波三连吧?! 世界上最大的树--雪曼将军树,这棵参天大树不是最长也不是最宽,是不是很奇怪,大只是他的体积是最大的,看图片肯定是感触不深,大家可以自己去看看  扯远了,这次我们介绍的是一种新的数据结构--树 之前的栈和队列,都是一

    2024年04月08日
    浏览(69)
  • 5.1 树和二叉树的定义

      博主简介:一个爱打游戏的计算机专业学生 博主主页: @夏驰和徐策 所属专栏:算法设计与分析 在计算机科学中,树是一种非线性数据结构,由节点(或称为顶点)和边组成。它是一种层次结构,具有根节点、子节点和父节点的概念。树的定义如下: 1. 根节点(Root):

    2024年02月07日
    浏览(30)
  • 树和二叉树的基本知识

    树是一种 非线性 的数据结构,它是由 n ( n=0 )个有限结点组成一个具有层次关系的集合。 把它叫做树是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的 。 有一个 特殊的结点,称为根结点 ,根节点没有前驱结点。 除根节点外, 其余结点被分成 M(M0) 个互

    2024年02月22日
    浏览(30)
  • 数据结构--树和二叉树

    树是一种 非线性 的数据结构,它是由n(n=0)个有限结点组成一个具有层次关系的集合。把 它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 有一个 特殊的结点,称为根结点 ,根节点没有前驱结点。 除根节点外,其余结点被分成M(M0)个互不相交

    2024年02月12日
    浏览(42)
  • 数据结构---树和二叉树

    树 属于1:n的形式,属于非线性结构 有且仅有一个根,其余的都是子树 而字树也有自己的根和子树,所以,树是一个递归的定义 ![在这里插入图片描述](https://img-blog.csdnimg.cn/677eb0f85d6945028e4fa02b208e06f4.png#pic_center 结点的度:结点拥有的子树的个数,或者是分支的个数,或者是

    2024年02月14日
    浏览(43)
  • 树和二叉树(概念及其结构)

    1.1树的概念 树是一种非线性的数据结构,它是由n(n=0)个有限结点组成一个具有层次关系的集合。把它 叫做树是因为它看起来像一颗倒挂的树,也就是说它是根朝上,而叶朝下的。 *有一个特殊的节点叫做根节点,根节点没有前驱节点 *除根节点外,其余节点被分成不相交的

    2023年04月22日
    浏览(32)
  • 数据结构—树和二叉树

    5.1树和二叉树的定义 树形结构 (非线性结构):结点之间有分支,具有层次关系。 5.1.1树的定义 树(Tree)是n(n≥0)个结点的有限集。 若n=0,称为空树; 若n>0,则它满足如下两个条件: 有且仅有一个特定的称为根(Root)的结点; 其余结点可分为m(m≥0)个互不相交的

    2024年02月14日
    浏览(46)
  • 树和二叉树 --- 数据结构

    目录 1.树的概念及结构 1.1树的概念 1.2树的表示 1.3树在实际生活中的运用 2.二叉树的概念及结构  2.1概念 2.2特殊的二叉树 2.3二叉树的性质 2.4二叉树的存储结构 树是一种 非线性 的数据结构,它是由n (n=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为 它看起来

    2024年02月15日
    浏览(44)
  • 数据结构-树和二叉树篇

    思维导图(基于教材) 错题复盘+计算题(基于习题解析) 课后习题 从这章开始,要是上课听不懂的话,推荐去看B站青岛大学王卓王卓老师讲解的很细节,基本上每个知识点十几二十分钟,刚开始看的时候,可能会不习惯王老师的语气词,别退出,视频重要的是老师讲解的

    2024年01月17日
    浏览(48)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包