树的定义和基本术语与二叉树

非线性结构: 前驱、后继不具备唯一性。

  1. 树:前驱唯一,后继不一定唯一,结点之间一对多的关系;
  2. 图:前驱,后继都不一定唯一,结点间多对多关系。

树和图理论基础属于离散数学的范畴,数据结构仅讨论特性及实现技术;
树描述一种层次结构,应用广泛,eg.文件系统、编译系统、目录组织 。

树的概念与定义

树的基本概念:
:n(n≥0)个结点的有限集合T。
当n=0时,称为空树;当n>0时,该集合满足如下条件:
(1) 必有一个称为(root)的特定结点,没有直接前驱,但有零个或多个直接后继。
(2) 其余n-1个结点可以划分成m(m≥0)个互不相交的有限集T1,T2,T3,…,Tm,其中Ti又是一棵树,称为根root的子树。每棵子树的根结点有且仅有一个直接前驱,但有零个或多个直接后继。

树的图解表示法:

  1. 倒置树结构(树形表示法):例如家庭关系的表示;
    在这里插入图片描述

  2. 文氏图表示法(嵌套集合表示法):例如某个国家A,分成B、C、D三省…

  3. 广义表形式(嵌套括号表示法):例如一本书A分为B、C、D三章,又…
    (A(B(E(K,L),F),C(G),D(H(M),I,J))).

  4. 凹入表示法:例如书的目录表的编排格式;
    在这里插入图片描述
    树的相关术语:

  • 结点:包含一个数据元素及若干指向其它结点的分支信息。
  • 结点的度:一个结点的子树个数称为此结点的度(后继数)。
  • 叶结点:度为0的结点,即无后继的结点,也称为终端结点
  • 分支结点:度不为0的结点,也称为非终端结点
  • 结点的层次:从根结点开始定义,根结点的层次为1,根的直接后继的层次为2,依此类推。
  • 结点的层序编号:将树中的结点按从上层到下层,同层从左到右的次序排成一个线性序列,依次给它们编以连续的自然数。
  • 树的度:树中所有结点的度的最大值。
  • 树的高度(深度):树中所有结点的层次的最大值。
  • 有序树:在树T中,如果各子树Ti之间是有先后次序的,则称为有序树。
  • 森林:m(m≥0)棵互不相交的树的集合。将一棵非空树的根结点删去,树就变成一个森林;反之,给森林增加一个统一的根结点,森林就变成一棵树。
  • 同构:对两棵树,通过对结点适当地重命名,就可以使这两棵树完全相等(结点和结点之间的关系都相等),则称这两棵树同构。
  • 孩子(子)结点:一个结点的直接后继称为该结点的孩子结点。如上图的B、C是A的孩子。
  • 双亲(父)结点:一个结点的直接前驱称为该结点的双亲结点。上图中A是B、C的双亲。
  • 兄弟结点:同一双亲结点的孩子结点互称兄弟结点。上图中H、I、J互为兄弟结点。
  • 堂兄弟:父亲是兄弟关系或堂兄关系的结点称为堂兄弟结点。上图中E、G、H互为堂兄弟。
  • 祖先结点:指从根结点到当前结点的路径上的所有结点。如结点K的祖先结点是A、B、E。
  • 子孙结点:一个结点的直接后继和间接后继。如结点D的子孙是H、I、J、M。
  • 前辈:层号比该结点小的结点,都称为该结点的前辈。如结点A、B、C、D都可以称为结点E的前辈。
  • 后辈:层号比该结点大的结点,都称为该结点的后辈。如结点K、L、M都可以称为结点E的后辈。
    在这里插入图片描述

二叉树

二叉树的定义与基本操作:
满足以下两个条件的树型结构叫做二叉树(Binary Tree):
1)每个结点的度都不大于2;(计划生育)
2)每个结点的孩子结点次序不能任意颠倒。(有序树)

二叉树的五种基本形态:
在这里插入图片描述
两种特殊的二叉树:

满二叉树
深度为k且有 2 k − 1 2^k-1 2k1个结点的二叉树。

  • 每层结点都是满的,即每层结点都具有最大结点数。

  • 每个结点用完生育指标 。

  • 满二叉树的特点:
    在同样深度的二叉树中结点个数最多;
    在同样深度的二叉树中叶结点个数最多。
    在这里插入图片描述

完全二叉树

一棵具有n个结点的二叉树T按层序编号,如果编号为i(1≤i≤n)的结点与同样深度的满二叉树中编号为i的结点在二叉树中的位置完全相同,则称T为完全二叉树。

完全二叉树特点或构造方法:

  • 在满二叉树中,从最后一个结点开始连续去掉任意个结点,即得到一棵完全二叉树;
  • 除最后一层外,其余各层都是满的;
  • 最后一层或者是满的,或者是右边缺少连续的若干结点。

在这里插入图片描述
完全二叉树的特点:

  • 叶结点只能出现在最下两层;

  • 度为1的结点只可能有一个;
    且该结点只有左孩子;

  • 深度为k的完全二叉树在k-1层之上一定是满二叉树;

  • 满二叉树是完全二叉树,完全二叉树不一定是满二叉树。

二叉树的性质:
性质1:在二叉树的第i层上至多有 2 i − 1 2^{i-1} 2i1个结点(i≥1)。
证明:用数学归纳法。

性质2:深度为k的二叉树至多有 2 k − 1 2^k-1 2k1个节点(k≥1)。
证明:用等比数列求和。

性质3: 对任意一棵二叉树T,叶结点数为n0,度数为2的结点数为n2,则n0= n2+1 。

证明:
设n为结点总数,n1为度为1的结点数。有n=n0+n1+n2
设二叉树中分支数目为B(结点关系,边),因为除根结点外,每个结点均对应一个进入它的分支,所以有:n=B+1。入度:子结点视角。
又因为二叉树中的分支都是由度为1和度为2的结点发出,所以分支数目为: B=n1+2n2。出度:父结点视角。
整理上述两式可得到:n=B+1=n1+2n2+1n=n0+n1+n2代入上式得出n0+n1+n2=n1+2n2+1,整理后得n0=n2+1,故结论成立。

性质4:具有n个结点的完全二叉树的深度为[ log ⁡ 2 n \log_2n log2n]+1(取整)。

性质5:具有n个结点的完全二叉树,按层序编号,则对序号为i的结点有:

  • 若i = 1, 则 i 无双亲结点;
    若i >1, 则 i 双亲结点为[i /2];
  • 若2i > n, 则 i 无左孩子;
    若2i ≤ n, 则 i 结点的左孩子为2i;
  • 若 2i+1 > n, 则i无右孩子;
    若 2i+1 ≤ n, 则i的右孩子为2i+1;
    用归纳法证明其中的(2)和(3)。

二叉树的存储结构:

1.顺序存储结构
对于完全二叉树,将其数据元素逐层放到一组连续的存储单元中。既存储方便有能容易得出结点位置
在这里插入图片描述
但对于一般的二叉树,必须用“虚结点”将其补为完全二叉树来存储。但是这样会造成空间浪费在这里插入图片描述

2.链式存储结构
每个结点至少包括三个域:数据域左孩子域右孩子域
此结点结构形成的二叉树称为二叉链表

在这里插入图片描述
在这里插入图片描述
用C语言定义二叉树的二叉链表结点结构:

typedef struct Node
{	
    DataType data;
	struct Node * LChild;
	struct Node * RChild;
}BiTNode, *BiTree; 

有时,为了找到双亲结点,可以增加一个Parent域,形成三叉链表。

结论:

若一个二叉树含有n个结点,则其二叉链表中必含有2n个指针域,其中必有n+1个空的链域。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值