树和二叉树的存储结构

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
10
100
树和二叉树
865
2020/4/23
Page 1
2020/4/23
Page ‹#›
二叉树
二叉树的定义
❖ 是n(n>=0)个结点的有限集,其子树分为互不相交的两个集合, 分别称为左子树和右子树,左子树和右子树也是二叉树。
左子树
B
根结点
A
C
右子树
D
E
I
GH
J
2020/4/23
Page 3
❖ 二叉树不是树的特例。
➢ 前k-1层中的结点都是“满”的,且第 k 层的结点都集中在左
边。
1
2
3
4
5
6
7
8 9 10 11 12
2020/4/23
Page 7
判断是否为完全二叉树,说明理由。
1
2
3
4
5
6
7
1
2
3
4
5
6
思考:满二叉树与完全二叉树的关系?
2020/4/23
Page 8
在满二叉树中,从最后 一个结点开始,连续去 掉任意多个结点,即是 一棵完全二叉树。
1
2
3
4
5
6
7
8 9 10 11 12 13 14 15
2020/4/23
Page 6
几种特殊形式的二叉树
完全二叉树
❖ 若对满二叉树的结点从上到下从左至右进行编号,则深度为k且有n 个结点的二叉树称为完全二叉树,当且仅当其每一个结点都与深度 为k的满二叉树的编号从1到n一一对应时。
❖ 特点
➢ 叶子结点只可能在层次最大的两层上出现;
存在的空结点(用Ø表示,Ø 表示该处没有元素存在,仅仅为了
好理解),使之成为一棵完全二叉树的形式,然后再用一维数组
顺序存储。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
ABCDØE F GHØØØØ I J
A
B
C
D
Ø
E
F
G H ØØØØI J
例如对于B结点而言:
bt[2]的双亲为└1/2┘=1,即在bt[1]中 (为A);
❖ 如果2i>n,则结点i无左孩子;如果2in,则其左孩子 是2i;
❖ 如果2i+1>n,则结点i无右孩子;如果2i+1n,则其右 孩子是2i+1。
2020/4/23
Page 11
2020/4/23
Page ‹#›
ຫໍສະໝຸດ Baidu
完全二叉树的顺序表示
A
B
C
如何反映结点之 间的逻辑关系?
DE
F
G
H I JK L
❖ 特点
➢ 每个结点至多有二棵子树(即不存在度大于2的结点);
➢ 二叉树的子树有左、右之分,且其次序不能任意颠倒。
❖ 基本形态
右子树 为空
左子 树为

A
A
A
A
空二 叉树
B
只有根结点 的二叉树
B
2020/4/23
B
C
左、右子树 均非空
Page 4
几种特殊形式的二叉树
斜树
AA
1 .所有结点都只有左子 树的二叉树称为左斜树;
1 2 3 4 5 6 7 8 9 10 11 12 ABCDE FGH I J KL
例如: bt[3]的双亲为└3/2┘=1,即在 bt[1]中; 其左孩子在bt[2i]=bt[6]中; 其右孩子在bt[2i+1]=bt[7]中。
2020/4/23
Page 13
一般二叉树的顺序表示
一般二叉树也按完全二叉树形式存储,只有增添一些并不
例如,深度为k,且只有k
1
个结点的右单枝树(每个非叶
2
结点只有右孩子),也需2k-1个
单元,即有(2k-1)- k个单元
k
被浪费。
2020/4/23
Page 15
深度为4,有12个结点的完全二叉树的顺序存储
1
2
3
4
5
6
7
8
9 10 11 12
没有浪费
1 2 3 4 5 6 7 8 9 10 11 12
2
3
4
浪费11

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
102000300000004
2020/4/23
Page 18
顺序存储结构适用于满二叉树和完全二叉树的存储。
2020/4/23
Page 19
链式存储结构
所谓链式存储是指,用链表来表示一棵二叉树,即用链来 指示着元素的逻辑关系。通常采用二叉链表来存储。
1 2 3 4 5 6 7 8 9 10 11 12
2020/4/23
Page 16
深度为4,有7个结点的一般二叉树的顺序存储
a
b
c
d
e
f
g
浪费4个
1 2 3 4 5 6 7 8 9 10 11
abcde0000 f g
2020/4/23
Page 17
深度为4,只有4个右孩子的二叉树的顺序存储
1
B
B
2 .所有结点都只有右子
树的二叉树称为右斜树; C
C
3.左斜树和右斜树统称为 斜树。
斜树的特点: 1. 在斜树中,每一层只有一个结点;
2.斜树的结点个数与其深度相同。
2020/4/23
Page 5
几种特殊形式的二叉树
满二叉树
❖ 深度为k且有2k-1个结点的二叉树。 ❖ 特点
➢ 每一层上的结点数都是最大结点数; ➢ 所有的分支结点的度数都为2; ➢ 叶子结点都在同一层次上。
链表中每个结点由三个域组成,除了数据域外,还有两个 指针域,分别用来给出该结点左右孩子所在的结点的存储地址。 其定义如下:
typedef struct BiTNode{ ElemType data; struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
n0 ,度为1的结点数为n1,度为2的结点数n2, 则n0= n2+1。
2020/4/23
Page 10
性质4:具有n个结点的完全二叉树的深度是log2n+1。 性质5:如果对一棵有n个结点的完全二叉树的结点按层序
编号,则对任一结点i(1in),有:
❖ 如果i=1,则结点i是二叉树的根,无双亲;如果i>1, 则其双亲是i/2;
A1
A1
B2
C3
D4 E5
F 6 G7
HIJK 8 9 10 11
L MN O 12 13 14 15
B2 D4 E5
C3 F 6 G7
不是完全二叉树,结点 10与满二叉树中的结点 10不是同一个结点
HI J 8 9 10
2020/4/23
Page 9
二叉树的性质
性质1:在二叉树的第 i 层至多有 2i-1 个结点 ( i1)。 性质2:深度为 k 的二叉树至多有 2k-1 个结点。 性质3:对于任何一棵二叉树T,若其终端结点(叶子)数为
其左孩子在bt[2i]=bt[4]中(为D);
其右孩子在bt[2i+1]=bt[5]中(为Ø )。
2020/4/23
Page 14
顺序存储的优缺点
这种存储结构适合于完全二叉树和满二叉树,既不浪
费存储空间,又能很快确定结点的存放位置、以及结点的
双亲和左右孩子的存放位置,但对一般二叉树,可能造成
存储空间的浪费。
相关文档
最新文档