浅谈树形结构——特殊的树——二叉树

一、什么是二叉树?

二叉树是特殊的树。一棵二叉树是结点的有限集合:(1)、结点或者为空。(2)、或者由一个根结点加上两颗别称为左子树和右子树的二叉树组成。

二、二叉树的特点

(1)、二叉树的每个结点的度不能超过2(<=2)。
(2)、二叉树要求其每颗子树都必须为二叉树。
(3)、二叉树的子树有左右之分,左子树、右子树不能次序颠倒,二叉树是一颗有序树。
在这里插入图片描述

三、二叉树的性质

(1)、若规定根结点层数为1,则一颗非空二叉树的第i层上最多有 2^(i - 1) (i > 0)个结点。(即根据公式 2 ^ (i - 1) 就可以求出二叉树每层所含的结点个数)
推导过程
在这里插入图片描述

(2)、若规定只有根结点的二叉树的深度为1,则深度为k的二叉树所含的总结点个数为 2^k - 1(k >= 0)。
推导过程:
在这里插入图片描述

(3)、对任何一颗二叉树,如果其叶结点个数为 n0,度为2的非叶子结点个数为n2,则 n0 = n2 + 1。
推导过程:
在这里插入图片描述

(4)、具有n个结点的完全二叉树的深度k为log以2为底的(n+1)。
推导过程:
在这里插入图片描述

(5)、对于具有n个结点的完全二叉树,如果按照从上至下、从左至右的顺序对所有结点从0开始编号,则对于序号为i的结点有:
在这里插入图片描述

四、两种特殊的二叉树

4.1、满二叉树

满二叉树:一棵二叉树,如果每层的结点树都达到最大值2,则这颗二叉树就是满二叉树。也就是说,一棵二叉树的层数为k,那么这颗二叉树的总结点数为 (2^k)- 1,则他就是满二叉树。
在这里插入图片描述

4.2、完全二叉树

完全二叉树是效率很高的数据结构,是由满二叉树引出来的。对于深度为k,有n个节点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从0至n-1的结点— —对应时称之为完全二叉树。满二叉树是一种特殊的完全二叉树。
在这里插入图片描述

五、一些关于二叉树特性的习题

(1)、若一颗二叉树的结点数为399,度为2的非叶子结点n2有199个,叶子结点n0为()个。
A、100
B、200
C、300
D、120
由于公式 n0 = n2 + 1,因此 选B。

(2)、在2n个结点的完全二叉树中,叶子结点的个数为()。
A、n
B、n+1
C、n-1
D、n/2
在这里插入图片描述
(3)、一个具有 767 个结点的完全二叉树,其叶子结点个数为()。
A、383
B、384
C、385
D、386

在这里插入图片描述

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

在这里插入图片描述

六、二叉树的存储[代码实现]

二叉树的存储结构分为:线性存储和类似于链表的链式存储

6.1、链式存储

二叉树的链式存储是通过一个一个的结点引用起来的,常见的表示方法有二叉和三叉表示方式, 具体如下:

// 孩子表示法
class Node {
	int val; // 结点的值
	Node left;// 左孩子的引用,常常代表左孩子为根的整颗左子树
	Node right;// 右孩子的引用,常常代表右孩子为根的整颗右子树
}

// 孩子双亲表示法
class Node {
	int val; // 数据域
	Node left; // 左孩子的引用,常常代表左孩子为根的整棵左子树
	Node right; // 右孩子的引用,常常代表右孩子为根的整棵右子树
	Node parent; // 当前节点的根节点
}

采用 孩子表示法 构造 二叉树

前序遍历preOrder()的代码解析:
在这里插入图片描述

获取结点数size()的代码解析:
在这里插入图片描述

6.2、顺序存储

七、二叉树的遍历

二叉树 最重要的 基本功能 就是遍历,二叉树的遍历方式具有4种。

所谓 遍历(Traversal) 是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。

访问结点所做的操作依赖于具体的应用问题 (比如:打印节点内容、节点内容加1)。 遍历是二叉树上最重要的操作之一,是二叉树上进行其它运算的基础。遍历的方式有4种:

(1)、前序遍历
根 ——> 左子树 ——> 右子树

(2)、中序遍历
左子树 ——> 根 ——> 右子树

(3)、后序遍历
左子树——> 右子树 ——> 根

(4)、层序遍历
从左到右,遍历每一层。

根据前序 和 后序 能不能创建一颗二叉树。不能。为什么不能?

7.1、关于二叉树遍历的选择题练习

(1)、某完全二叉树按层次输出(同一层从左到右)的序列为 ABCDEFGH 。该完全二叉树的前序序列为()
A: ABDHECFG
B: ABCDEFGH
C: HDBEAFCG
D: HDEBFGCA

(2)、二叉树的先序遍历和中序遍历如下:先序遍历:EFHIGJK;中序遍历:HFIEJKG.则二叉树根结点为()
A: E
B: F
C: G
D: H

(3)、设一课二叉树的中序遍历序列:badce,后序遍历序列:bdeca,则二叉树前序遍历序列为()
A: adbce
B: decab
C: debac
D: abcde

(4)、某二叉树的后序遍历序列与中序遍历序列相同,均为 ABCDEF ,则按层次输出(同一层从左到右)的序列为()
A: FEDCBA
B: CBAFED
C: DEFCBA
D: ABCDEF

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值