【数据结构】树与二叉树概念辨析

文章目录

  • 一、什么是树
  • 二、树的相关概念
  • 三、树与非树
  • 四、树的表示
  • 五、树的应用
  • 六、什么是二叉树
  • 七、特殊的二叉树
  • 八、二叉树的性质
  • 九、二叉树练习题

一、什么是树

  • 树是一种非线性的数据结构,由有限个结点组成的有层次关系的集合。
  • 之所以叫做树,是因为它像一棵倒挂的树,根朝上,叶子朝下。
    如图【数据结构】树与二叉树概念辨析_第1张图片
  • 其中,有一个特殊的结点叫做根结点。
    根结点没有前驱结点,可以有0个或多个后继结点
    图中的A就是根结点。
  • 任何一颗树 = 根 + 子树
    图中的树除了根结点A,其余部分有三棵子树。
    而这三棵子树,又分别有自己的根和子树。
    如以B为根的树,有两棵子树,这两棵子树又分别以E和F为根 。

二、树的相关概念

【数据结构】树与二叉树概念辨析_第2张图片

  • 结点的度:一个结点含有子树的个数
    如图,A结点的度是6,B结点的度是0,D结点的度是1,E结点的度是2。
  • 树的度:树所有结点的度的最大值
    如图中的树的度为6。
  • 叶结点:度为0的结点
    如B、C、H、I、P、Q、K、L、M、N都是叶结点。
  • 分支结点:度不为0的结点
    如D、E、F、G、J都是分支结点。
  • 父结点和子结点
    如D是H的父结点,H是D的子结点;E是J的父结点,J是E的子结点。
  • 兄弟结点:有相同父结点的结点
    如B、C、D、E、F、G是兄弟结点。
  • 堂兄弟结点:父结点在同一层的结点
    如H、I、K、N堂兄弟结点。
  • 结点的层:从根开始,根为第1层,根的子结点为第2层…
    如图中的树总共有4层。
  • 树的高度 / 深度
    如图中树的高度 / 深度是4。
  • 结点的祖先:从根到该结点所经的所有结点
    如A、E、J是Q的祖先;A、F是K的祖先。
  • 子孙:对任意一棵树,子树中的所有结点都是根结点的子孙
    如图中的树,所有结点都是A的子孙。
    在以E为根结点的子树中,I、J、P、Q都是E的子孙。

三、树与非树

【数据结构】树与二叉树概念辨析_第3张图片
对于树:

  • 子树不能相交
  • 除了根结点,每个结点有且只有一个父结点
  • n个结点的树有n-1条边(即连接结点的线)。

四、树的表示

树的表示较为麻烦,除了数据域,还要表示结点之间的关系。
实际上,树有很多种表示方式,这里简单介绍最常用的一种。
如图:【数据结构】树与二叉树概念辨析_第4张图片

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

五、树的应用

树最常见的应用,就在于文件系统的目录结构。
如Linux树状目录结构:【数据结构】树与二叉树概念辨析_第5张图片

六、什么是二叉树

顾名思义,二叉树就是最多有两个分叉的树。
如下图,二叉树就是由以下几种情况复合而成。【数据结构】树与二叉树概念辨析_第6张图片

对于二叉树:

  • 不存在度大于2的结点
  • 二叉树的子树有左右之分

七、特殊的二叉树

  1. 满二叉树:
    • 每层的结点数都达到最大值的二叉树。

【数据结构】树与二叉树概念辨析_第7张图片
2. 完全二叉树:

  • 简单来说,就是在满二叉树的基础上,最后一层有结点但是不一定满,而且最后一层的结点从左到右必须是连续的。
  • 比如上图的完全二叉树,最后一层的最右边的结点,只能是左子树,而不能是右子树。
  • 满二叉树是完全二叉树的一种。

八、二叉树的性质

  1. 对于一棵高度为h的满二叉树,它的结点个数是 2^h - 1记忆:归纳法
    利用等比数列求和公式,很容易得到结果。

【数据结构】树与二叉树概念辨析_第8张图片

  1. 对于一棵高度为h的完全二叉树,它的结点个数范围是多少
    容易发现,前 h-1 层总是全满,个数为 2^(h-1) - 1
    • 最小时,第h层只有一个结点,2^(h-1) - 1加上1,结点个数为2^(h-1)
    • 最大时,第h层结点全满,也就是满二叉树,先前我们计算过,结点个数是2^h - 1

综上,结果为:

【数据结构】树与二叉树概念辨析_第9张图片
重要结论:

  • 对任意一棵二叉树,第h层最多有2^(h-1)个结点。记忆:归纳法
  • 对任意一棵二叉树,度为0的结点永远比度为2的多1个。
  • 对任意一棵完全二叉树,度为1的结点要么1个,要么0个。

九、二叉树练习题

  1. 某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为( )
    A 不存在这样的二叉树
    B 200
    C 198
    D 199

由重要结论可知,二叉树度为0的结点比度为2的多1个,度为0的结点也就是叶子结点,个数为199 + 1 = 200。

  1. 在具有 2n 个结点的完全二叉树中,叶子结点个数为( )
    A n
    B n+1
    C n-1
    D n/2

二叉树只有三种结点,度分别为0、1、2。
由重要结论可知,完全二叉树度为1的结点要么1个要么0个。
而二叉树度为0的结点比度为2的多1。
综上可知,度为0的结点有n个,度为1的1个,度为2的n-1个。
所以叶子结点的个数为n。

  1. 一棵完全二叉树的结点数位为531个,那么这棵树的高度为( )
    A 11
    B 10
    C 8
    D 12

由高度为h的完全二叉树结点个数范围可知,h=10。

你可能感兴趣的:(数据结构简明教程(C语言实现),数据结构,算法,c语言)