在二叉树的第i层上最多有 2 i − 1 2^{i-1} 2i−1个结点( i ≥ 1 i\geq1 i≥1);
在深度为K的二叉树上最多有 2 k − 1 2^{k}-1 2k−1个结点( k ≥ 1 k\geq1 k≥1);
对于任何一棵二叉树,如果其叶子结点数为 n 0 n_{0} n0,度为2的结点数为 n 2 n_{2} n2,则 n 0 = n 2 + 1 n_{0}=n_{2}+1 n0=n2+1
如果对一棵有n个结点的完全二叉树的结点按层序编号(从第一层到最后一层,每层从左到右),则对任意结点 i ( 1 ≤ i ≤ n ) i(1 \leq i\leq n) i(1≤i≤n)有如下规则:
二叉树的遍历主要有三种:(注意根在顺序里面的位置)
(1)先(根)序遍历(根左右)
(2)中(根)序遍历(左根右)
(3)后(根)序遍历(左右根)
举个栗子:
先(根)序遍历(根左右):A B D H E I C F J K G
中(根)序遍历(左根右) : D H B E I A J F K C G
后(根)序遍历(左右根) : H D I E B J K F G C A
以后(根)序遍历为例,每次都是先遍历树的左子树,然后再遍历树的右子树,最后再遍历根节点,以此类推,直至遍历完整个树。
已知:
通过前序规则我们可以知道:根节点为A
通过中序规则和根节点A我们可以推导出如下图:
我们通过中序规则将左子树的根节点推算出来为B,我们再根据前序规则推算出下图:
再通过中序规则推算出:
最后再根据前序规则推算出右子树的根节点为C:
推荐文章:https://blog.csdn.net/qq_29519041/article/details/81428934
常用在压缩数据领域的一种编码,是一种无损编码,将文件内容无损压缩以减少传输带宽的消耗,解压后的文件与源文件是一样的
首先统计出每种字符出现的频率!(也可以是概率)//权值
--------------------------------------------------
例如:频率表 A:60, B:45, C:13 D:69 E:14 F:5 G:3
第一步:找出字符中最小的两个,小的在左边,大的在右边,组成二叉树。在频率表中删除此次找到的两个数,并加入此次最小两个数的频率和。
F和G最小,因此如图,从字符串频率计数中删除F与G,并返回G与F的和 8给频率表
频率表 A:60, B:45, C:13 D:69 E:14 FG:8
最小的是 FG:8与C:13,因此如图,并返回FGC的和:21给频率表。
如图
---------------------------------------------------------------------------------------------------
重复第一步:
------------------------------------------------ ---------------------------------------------------
频率表 A:60 B: 45 D: 69 E: 14 FGC: 21
如图
-----------------------------------------------------------------------------------------------------
重复第一步
-----------------------------------------------------------------------------------------------------
频率表 A:60 B: 45 D: 69 FGCE: 35
-----------------------------------------------------------------------------------------------------
重复第一步
-----------------------------------------------------------------------------------------------------
频率表 A:60 D: 69 FGCEB: 80
-----------------------------------------------------------------------------------------------------
重复第一步
-----------------------------------------------------------------------------------------------------
频率表 AD:129 FGCEB: 80
对于n个结点的二叉树,在二叉链存储结构中有n+1个空链域,利用这些空链域存放在某种遍历次序下该结点的前驱结点和后继结点的指针,这些指针称为线索,加上线索的二叉树称为线索二叉树。
二叉树的遍历本质上是将一个复杂的非线性结构转换为线性结构,使每个结点都有了唯一前驱和后继(第一个结点无前驱,最后一个结点无后继)。对于二叉树的一个结点,查找其左右子女是方便的,其前驱后继只有在遍历中得到。为了容易找到前驱和后继,有两种方法。一是在结点结构中增加向前和向后的指针,这种方法增加了存储开销,不可取;二是利用二叉树的空链指针。
优点:
缺点:
转换为:前序线索二叉树
很简单,我们只需要将二叉树以前序遍历的方式写出来我们就知道了
前序遍历:A,B,D,E,H,C,F,G,I
看顺序我们就知道:
D的前序为B,后序为E
H的前序为E,后序为C
F的前序为C,后序为G
I的前序为G,后序为null
转换为:中序线索二叉树
中序遍历:D,B,H,E,A,F,C,G,I
转换为:后序线索二叉树
后序遍历:D,H,E,B,F,I,G,C,A