树的基本知识梳理

本文重点知识:树相关概念,二叉树基本知识

前言

       前面博客重点讲解了顺序表,链表,栈和队列等等线性数据结构,今天我们开始讲解难度更大的一个内容,就是另外一种数据结构,叫做树,和之前那些数据结构不同,之前的数据结构都是线性数据结构(除了头和尾,每一个元素都有一个前驱和一个后继),而今天讲的树则是非线性结构~

树的概念和结构

既然这种数据结构叫做树,那肯定是和现实中的树有关系的~,不错,数据结构中的树就是把现实中的树倒挂了起来~, 根是朝上的,叶子是朝下的~

划重点!!! 数据结构中 树 是按照 现实中的树 + 人类亲缘关系来定义的~

显然A就是根节点,而A分支出去的各个分支形成的结构我们可以看成是A的子树(下图中红笔圈出来的都是A的子树),而A分出去的各个节点就相当于人类血缘关系中的孩子一样,可以认为B,C,D,E,F,G都是A的孩子~,都叫子节点~

 下面是一系列和树相关的概念~

节点的度 :一个节点含有的子树的个数称为该节点的度; 如上图: A 的为 6
叶节点或终端节点 :度为 0 的节点称为叶节点; 如上图: B C H I... 等节点为叶节点
非终端节点或分支节点 :度不为 0 的节点; 如上图: D E F G... 等节点为分支节点 (显然根节点也属于非终端节点或分支节点)
双亲节点或父节点 :若一个节点含有子节点,则这个节点称为其子节点的父节点; 如上图: A B 的父节点
孩子节点或子节点 :一个节点含有的子树的根节点称为该节点的子节点; 如上图: B A 的孩子节点
(一个人可能既是家长,也是孩子,和人类血缘关系一样,一个节点可既是父节点,也可是子节点)
兄弟节点 :具有相同父节点的节点互称为兄弟节点; 如上图: B C 是兄弟节点( 我们所说的兄弟默认是亲兄弟,不是堂表兄弟, 因此上图中H和I不能称为兄弟节点)
树的度 :一棵树中,最大的节点的度称为树的度; 如上图:树的度为 6
节点的层次 :从根开始定义起,根为第 1 层,根的子节点为第 2 层,以此类推(注意和数组下标从0开始作作区分)
树的高度或深度 :树中节点的最大层次; 如上图:树的高度为 4 (就是树有几层)
堂兄弟节点 :双亲在同一层的节点互为堂兄弟;如上图: H I 互为堂兄弟节点
节点的祖先 :从根到该节点所经分支上的所有节点;如上图: A 是所有节点的祖先
子孙 :以某节点为根的子树中任一节点都称为该节点的子孙。如上图:所有节点都是 A 的子孙
森林 :由 m m>0 )棵互不相交的树的集合称为森林;(一定要注意,要求树之间互不相交,因为一旦相交,就是我们后面要介绍的另外一种数据结构---图)
关于树要说明的几个点
①根节点比较特殊,没有前驱节点~
②树是递归定义的,这点对我们后序二叉树的学习至关重要,后面有些OJ题玩的就是递归~
意思就是每一个树都可以看成两部分,根+子树

 

 ③除了根节点外,每一个节点只有一个父亲(和亲缘关系是一模一样的~)

树的表示

用代码实现树有不少种写法,比如说:

1.明确了树的度就可以定义

2.用顺序表存储孩子

3.双亲表示法(每个位置只存双亲的指针或者下标)

4.左孩子右兄弟表示法(最优结构)

每个节点是个结构体,结构体中有三个成员变量,第一个存放数据,第二个存放指向第一个孩子节点的指针,第三个存放指向自己亲兄弟节点的指针,因此叫左孩子右兄弟表示法~

左孩子右兄弟表示法极大的简化了树的定义~

树的应用

树的一个重要应用是目录树~

电脑磁盘中存放文件夹就用到了树的存储结构~~~

二叉树相关概念

···二叉树:

概念: 度<=2的树就叫做二叉树,也就是说每个父亲最多两个孩子~,下面这些树都是二叉树~

 任意二叉树都是由以下情况复合而成

···满二叉树

即每层都是满的,每个父亲都有两个孩子

···完全二叉树:

假设完全二叉树的高度是h(有h层)

则完全二叉树的特点是:前h-1层都是满的,第h层可以不满,且最后一层从左到右是连续的~

注意:第h层可以不满,也可以满,若第h层满了,则该完全二叉树就是满二叉树,因此我们说满二叉树是特殊的完全二叉树~

二叉树节点个数

假设二叉树高度为h,即有h层!

 满二叉树节点总个数:2^h-1

显然,节点总个数为 2^0 + 2^1 + ·······+2^(h-1),根据等比数列求和公式,得节点总个数为2^h-1

 完全二叉树节点范围:[2^(h-1), 2^h-1]

显然完全二叉树的节点个数是一个范围,最多就是满二叉树节点个数,为2^h-1

节点最少的情况就是前h-1层是满的,第h层只有一个节点(因为前提是完全二叉树有h层),这时可以看成前h-1层是满的二叉树+最后一层的一个节点~

满二叉树2^h-1中h替换成h-1,再+1得到完全二叉树节点最少是2^(h-1)个

二叉树的存储结构

我们所说的二叉树其实知识一种逻辑结构,就和之前讲解单链表时箭头是假想出来的一样,研究二叉树的存储结构也就是研究二叉树在内存中的物理存储结构~

二叉树的存储结构有两种:顺序结构和链式结构~

1.顺序结构

普通二叉树并不适合用数组来存储,因为存在着大量的空间浪费,而完全二叉树尤其适合用数组存储~~~

①完全二叉树存储

 ②普通二叉树存储

如果数组中挨个存储二叉树数据,那么父子下标关系就全乱了,如果按照完全二叉树的形态存储,会造成大量空间的浪费~,因此只有完全二叉树适合用数组存储~

2.链式结构

①二叉链

②三叉链

树的基本知识就介绍到这了,欲知后事如何,且听下回解说~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值