二叉树的重要概念

前言:

二叉树是树形结构的一个重要类型,一般的树也可以转化成二叉树来解决问题。在数据结构的系统中,树形结构也是信息存储和遍历的重要实现,二叉树的最大特点就是一个根包含着左右子树的形式,许多具有层次关系的问题几乎都可以用二叉树来解决。

一、树的概念

树是一种非线性结构,由n(n >=0)个有限节点组成的具有层次关系的集合。树有一个特殊的节点,该节点没有前驱节点,称为根节点。除了根节点之外,每颗子树都有且仅有一个前驱节点,(0<=n<=2)个子节点。在树形结构中,子树之间不能有交集,否则成环就不是子树树也是基于递归来实现的。

节点的度:当前节点拥有的子树个数称为节点的度,如节点1的度为2

树的度:所有节点的度的最大值称为树的度(二叉树不存在度大于二的节点)

叶子结点(终端结点):度为0的节点称为叶子结点,如4,5,6,7

双亲结点(父结点):子节点的前驱节点称为父结点,如1是2的父结点

子节点(孩子节点):父节点的后继节点称为子节点,如1的子节点是2和3

根节点:没有前驱节点,如1

节点的层:从根开始,根为第一层,依次往下

树的高度(深度):树的最大层次,如图高度为3

分支结点(非终端结点):度不为0的节点

节点祖先:从根到该阶段所经过分支上的所有节点,如1为所有节点祖先

子孙:从根到该节点的子树中任意节点都称为该节点的子孙,所有节点为1节点的子孙

森林:由n(n>=0)个不相交的树组成的集合

二、二叉树的节点的存储形式

二叉树的存储通常分为顺序存储和链式存储,顺序存储可以利用栈和队列的特性根据遍历来实现(下面会提到),还有一种就是链式存储,如下图:

链式存储又分为二叉表示方式和三叉表示方式:二叉表示包括着数据域,还有左子域和右子域,左右子域代表着当前节点的左右孩子为根的左右子树。三叉表示比二叉表示多了一条双亲节点域,也就是前驱指针域,来记录着当前节点的根节点。

三、俩种特殊的二叉树

(1)满二叉树

一颗二叉树,每层节点都达到最大值,则可以称这棵树为满二叉树。k层的节点数为2^k - 1。

(2)完全二叉树

完全二叉树就是当每个节点都与高度为k的满二叉树的节点按顺序一一对应。通俗来讲就是最后一层节点数可以不达到最大值,但要按顺序对应起来。

如图就不是一颗完全二叉树。满二叉树也算是一种特殊的完全二叉树

四、二叉树的性质

(1)在非空二叉树的第i层最多有2^(i-1)个节点。

(2)深度为k的满二叉树的节点数就是深度为k的普通二叉树的最大节点数。

(3)对于一颗二叉树,若叶子节点个数为n0,对于度为2的非叶子节点(n2)则有n0=n2+1

(4)具有n个节点的完全二叉树深度k为log2(n+1)(向上取整)。

(5)对于n个节点的完全二叉树,若按照层序遍历的方式给节点从0开始编号,对于序列号为i的节点具有以下特点:

i > 0 双亲节点序号为 (i- 1)/2。

若是都存在有左右孩子节点,则有左孩子序号:2i+1 ;右孩子序号:2i+2。

五、二叉树的遍历方式

(1)前序中序后序遍历

前序遍历:遍历规则为访问 根 -> 左-> 右

A-B-D-G-C-E-F

中序遍历:遍历规则为访问 左 -> 根-> 右

G-D-B-A-E-C-F

后续遍历:遍历规则为访问 左 -> 右-> 根

G-D-B-E-F-C-A

二叉树的遍历规则通常是通过递归定义的,前中后序遍历代码实现则为:

依次按照遍历顺序递归即可。

(2)层序遍历

层序遍历是按照从上到下从左到右的顺序来遍历的

A-B-C-D-E-F-G

层序遍历则需要依靠队列来完成:

代码实现:

六、二叉树的基本操作

先定义好节点类型,再定义一个树的根节点root

操作方法

获取树的节点数:

1.可以通过前序遍历的思路来统计树的节点

2.还有一种方法可以让代码更加简洁,可以利用返回值的方法来完成递归统计操作:

代码如下:

获取叶子节点的个数:

1.通过遍历的方法来递归统计叶子节点,结束条件为当前节点为空,统计条件为左右子树都为空。

2.也可以利用返回值来统计叶子节点。

代码实现:

获取第k层的节点数:

利用返回值和层数的层层递减来统计第k层的节点数,结束条件是节点为空,统计条件是k=1的节点不为空。

代码实现:

获取二叉树高度:

通过层层遍历关系决出左右子树的最大高度,再加上自身高度返回。

代码实现:

查找value值是否存在:

这个单纯就是找到返回节点,只需要遍历就行,结束条件不为空即可。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值