树和叉树(数据结构)
数据结构与算法系列研究五——树、二叉树、三叉树、平衡排序二叉树AVL

数据结构与算法系列研究五——树、⼆叉树、三叉树、平衡排序⼆叉树AVL树、⼆叉树、三叉树、平衡排序⼆叉树AVL⼀、树的定义树是计算机算法最重要的⾮线性结构。
树中每个数据元素⾄多有⼀个直接前驱,但可以有多个直接后继。
树是⼀种以分⽀关系定义的层次结构。
a.树是n(≥0)结点组成的有限集合。
{N.沃恩}(树是n(n≥1)个结点组成的有限集合。
{D.E.Knuth})在任意⼀棵⾮空树中:⑴有且仅有⼀个没有前驱的结点----根(root)。
⑵当n>1时,其余结点有且仅有⼀个直接前驱。
⑶所有结点都可以有0个或多个后继。
b. 树是n(n≥0)个结点组成的有限集合。
在任意⼀棵⾮空树中:⑴有⼀个特定的称为根(root)的结点。
⑵当n>1时,其余结点分为m(m≥0)个互不相交的⼦集T1,T2,…,Tm。
每个集合本⾝⼜是⼀棵树,并且称为根的⼦树(subtree)树的固有特性---递归性。
即⾮空树是由若⼲棵⼦树组成,⽽⼦树⼜可以由若⼲棵更⼩的⼦树组成。
树的基本操作1、InitTree(&T) 初始化2、DestroyTree(&T) 撤消树3、CreatTree(&T,F) 按F的定义⽣成树4、ClearTree(&T) 清除5、TreeEmpty(T) 判树空6、TreeDepth(T) 求树的深度7、Root(T) 返回根结点8、Parent(T,x) 返回结点 x 的双亲9、Child(T,x,i) 返回结点 x 的第i 个孩⼦10、InsertChild(&T,&p,i,x) 把 x 插⼊到 P的第i棵⼦树处11、DeleteChild(&T,&p,i) 删除结点P的第i棵⼦树12、traverse(T) 遍历树的结点:包含⼀个数据元素及若⼲指向⼦树的分⽀。
●结点的度: 结点拥有⼦树的数⽬●叶结点: 度为零的结点●分枝结点: 度⾮零的结点●树的度: 树中各结点度的最⼤值●孩⼦: 树中某个结点的⼦树的根●双亲: 结点的直接前驱●兄弟: 同⼀双亲的孩⼦互称兄弟●祖先: 从根结点到某结点j 路径上的所有结点(不包括指定结点)。
数据结构-C语言-树和二叉树

练习
一棵完全二叉树有5000个结点,可以计算出其
叶结点的个数是( 2500)。
二叉树的性质和存储结构
性质4: 具有n个结点的完全二叉树的深度必为[log2n]+1
k-1层 k层
2k−1−1<n≤2k−1 或 2k−1≤n<2k n k−1≤log2n<k,因为k是整数
所以k = log2n + 1
遍历二叉树和线索二叉树
遍历定义
指按某条搜索路线遍访每个结点且不重复(又称周游)。
遍历用途
它是树结构插入、删除、修改、查找和排序运算的前提, 是二叉树一切运算的基础和核心。
遍历规则 D
先左后右
L
R
DLR LDR LRD DRL RDL RLD
遍历规则
A BC DE
先序遍历:A B D E C 中序遍历:D B E A C 后序遍历:D E B C A
练习 具有3个结点的二叉树可能有几种不同形态?普通树呢?
5种/2种
目 录 导 航 Contents
5.1 树和二叉树的定义 5.2 案例引入 5.3 树和二叉树的抽象数据类型定义 5.4 二叉树的性质和存储结构 5.5 遍历二叉树和线索二叉树 5.6 树和森林 5.7 哈夫曼树及其应用 5.8 案例分析与实现
(a + b *(c-d)-e/f)的二叉树
目 录 导 航 Contents
5.1 树和二叉树的定义 5.2 案例引入 5.3 树和二叉树的抽象数据类型定义 5.4 二叉树的性质和存储结构 5.5 遍历二叉树和线索二叉树 5.6 树和森林 5.7 哈夫曼树及其应用 5.8 案例分析与实现
二叉树的抽象数据类型定义
特殊形态的二叉树
只有最后一层叶子不满,且全部集中在左边
数据结构PPT树和二叉树

(c)
L
R
R
(d)
(e)
(a) 空树
(b) 只含根结点
(d) 左右子树均不为空树
(c) 右子树为空树 (e) 左子树为空树
安
徽 理
6.2.2 二叉树的性质
工
大 学
性质1 在二叉树的第 i 层上至多有 2i - 1个结点。(i ≥ 1)
[证明用归纳法]
证明:当i=1时,只有根结点,2 i-1=2 0=1。
一般树和森林与二叉树的转换关系,最后介绍树的应用实
例。
安
徽 理
6.1 树的定义和基本术语
工
大 学
❖ 什么是树?树是由 n (n ≥ 0) 个结点的有限集合。如果 n
= 0,称为空树;如果 n > 0,则
▪ 有且仅有一个特定的称之为根(Root)的结点,它只有直
接后继,但没有直接前驱;
▪ 当n > 1,除根以外的其它结点划分为 m (m >0) 个互不
树构成(即不存在度大于2的结点),并且左、右子树本身也
是二叉树。 说明: 1. 二叉树中每个结点最多有两棵子 树,二叉树每个结点度小于等于2;
A
B
D
E
C F
2. 左、右子树不能颠倒——有序树;
G
3. 二叉树是递归结构,在二叉树的定
义中又用到了二叉树的概念。
安
徽 理
二叉树的形态
工
大
学
φ
L
(a)
(b)
例1. 家族族谱
设某家庭有13个成员A、B、C、D、E、F、G、H、I、J
、K、L、M,他们之间的关系可如图所示的树表示。
例2. 单位行政机构的组织关系
数据结构(树和二叉树)练习题与答案1

1、树最适合用来表示()。
A.元素之间无联系的数据B.元素之间具有层次关系的数据C.无序数据元素D.有序数据元素正确答案:B2、现有一“遗传”关系,设x是y的父亲,则x可以把他的属性遗传给y。
表示该遗传关系最适合的数据结构为()。
A.线性表B.树C.数组D.图正确答案:B3、一棵节点个数为n、高度为h的m(m≥3)次树中,其分支数是()。
A.n+hB.h-1C.n-1D.nh正确答案:C4、若一棵3次树中有2个度为3的节点,1个度为2的节点,2个度为1的节点,该树一共有()个节点。
A.11B.5C.8D.10正确答案:A解析: A、对于该3次树,其中有n3=2,n2=1,n1=2,总分支数=总度数=n-1,总度数=1×n1+2×n2+3×n3=10,则n=总度数+1=11。
5、设树T的度为4,其中度为1、2、3、4的节点个数分别为4、2、1、1,则T中的叶子节点个数是()。
A.6B.8C.7D.5正确答案:B解析: B、这里n1=4,n2=2,n3=1,n4=1,度之和=n-1=n1+2n2+3n3+4n4=15,所以n=16,则n0=n-n1-n2-n3-n4=16-8=8。
6、有一棵三次树,其中n3=2,n2=1,n0=6,则该树的节点个数为()。
A.9B.12C.大于等于9的任意整数D.10正确答案:C解析: C、n=n0+n1+n2+n3=6+n1+1+2=9+n1。
7、假设每个节点值为单个字符,而一棵树的后根遍历序列为ABCDEFGHIJ,则其根节点值是()。
A.JB.BC.以上都不对D.A正确答案:A8、一棵度为5、节点个数为n的树采用孩子链存储结构时,其中空指针域的个数是()。
A.4nB.4n-1C.4n+1D.5n正确答案:C解析: C、总指针数=5n,非空总指针数=分支数=n-1,空指针域的个数=5n-(n-1)=4n+1。
9、有一棵三次树,其中n3=2,n2=2,n1=1,该树采用孩子兄弟链存储结构时,则总的指针域数为()。
数据结构详细教案——树与二叉树

数据结构详细教案——树与二叉树一、教学目标1.了解树和二叉树的基本概念和特点;2.掌握树和二叉树的基本操作;3.能够通过递归遍历树和二叉树。
二、教学重难点1.树和二叉树的基本概念和特点;2.递归遍历树和二叉树。
三、教学内容1.树的概念和特点1.1树的定义树是n(n>=0)个节点的有限集。
当n=0时,称为空树;如果不为空树,则1. 树有且仅有一个特殊节点被称为根(Root);2.其余节点可分为m(m>0)个互不相交的有限集T1,T2,...,Tm,其中每个集合又是一棵树。
1.2节点间的关系- 父节点(parent)是当前节点的直接上级节点;- 子节点(child)是当前节点的直接下级节点;- 兄弟节点(sibling)是具有同一父节点的节点;- 祖先节点(ancestor)是通过从当前节点到根的任意路径可以到达的节点;- 子孙节点(descendant)是通过从该节点到子树的任意节点可以到达的节点。
1.3树的特点-树是一个有层次的结构,可以看作是一个鱼骨图;-树中的每个节点都可以有多个子节点,但只有一个父节点;-树中的节点之间是唯一的,不存在重复节点;-树中的任意两个节点之间都有且仅有一条路径连接。
2.二叉树的概念和特点2.1二叉树的定义二叉树是一种特殊的树结构,它的每个节点最多只能有两个子节点,分别称为左子节点和右子节点。
2.2二叉树的特点-二叉树的度最大为2,即每个节点最多有两个子节点;-二叉树的第i层最多有2^(i-1)个节点;-对于任意一颗二叉树,如果其叶子节点数为n0,度为2的节点数为n2,则有n0=n2+1;-完全二叉树是一种特殊的二叉树,除了最后一层的叶子节点外,每一层的节点都是满的。
四、教学过程1.讲解树和二叉树的基本概念和特点,引导学生理解树和二叉树的定义和节点间的关系。
2.分析树和二叉树的基本操作,并通过实例演示操作过程,让学生掌握操作的步骤和方法。
3.运用递归算法遍历树和二叉树的过程,详细讲解前序遍历、中序遍历和后序遍历的定义和实现方法。
数据结构(树与二叉树)习题与答案

一、单选题1、已知一算术表达式的中缀形式为 A-B/C+D*E,前缀形式为+-A/BC*DE,其后缀形式为( )。
A.ABC/-DE*+B.AB/C-D*E+C. A-BC/DE*+D. ABCDE/-*+正确答案:A2、有关二叉树下列说法正确的是()。
A.二叉树中任何一个结点的度都为2B.一棵二叉树的度可以小于2C.二叉树中每个结点的度都为2D.二叉树中至少有一个结点的度为2正确答案:B3、在一棵高度为k的满二叉树中,结点总数为()。
A.2k-1B. 2k-1C. 2k-1+1D.2k正确答案:B4、某二叉树中有60个叶子结点,则该二叉树中度为2的结点个数为()。
A.不确定B.60C.59D.61正确答案:C解析:任意二叉树中,n0=n2+15、高度为7的完全二叉树,最少有()个结点。
A.127B.128C.63D.64正确答案:D解析:前6层都是满的,最后一层(第7层)近1个结点。
可保证题目条件。
6、高度为7的二叉树,最少有()个结点。
A.7B.127C.13D.64正确答案:A解析:每层只有1个结点。
共7个即可构成一个高度为7的二叉树。
7、对任意一棵有n个结点的树,这n个结点的度之和为( )。
A.n-1B.2*nC.n+2D.n正确答案:A解析:所有结点的度之和为分支个数,分支个数即为结点个数-18、在下列存储形式中,()不是树的存储形式。
A.双亲表示法B.孩子-兄弟表示法C.孩子链表表示法D.顺序存储表示法正确答案:D9、对二叉树中的结点进行编号,要求根结点的编号最小,左孩子结点编号比右孩子结点编号小。
则应该采用()遍历方法对其进行编号。
A.层次B.先序C.后序D.中序正确答案:B10、某二叉树中有60个叶子结点,则该二叉树中度为2的结点个数为()。
A. 59B.61C.60D.不一定正确答案:A11、树的后根遍历,相当于对应二叉树的()遍历。
A.中序B.后序C.层次D.先序正确答案:A二、判断题1、完全二叉树一定存在度为1的结点。
云大《数据结构》课程教学课件-第6章 树和二叉树(147P)_OK

^d ^ ^ e ^ 三叉链表
3)二叉链表是二叉树最常用的存储结构。还有其它链接方 法,采用何种方法,主要取决于所要实施的各种运算频度。
例:若经常要在二叉树中寻找某结点的双亲时,可在每个结 点上再加一个指向其双亲的指针域parent,称为三叉链表。
lchild data parent rchild
2021/8/16
2021/8/16
9
6.2 二 叉 树
6.2.1 二叉树的概念
一、二叉树的定义: 二叉树(Binary Tree)是n(n>=0)个结点的有限集,它或者是 空集(n=0)或者由一个根结点和两棵互不相交的,分别称 为根的左子树和右子树的二叉树组成。 可以看出,二叉树的定义和树的定义一样,均为递归定 义。
A
集合3
集合1
BCD
EF
G
集合2
2021/8/16
3
2、树的表示方法 1)树形图法
A
BCD
EF
G
2)嵌套集合法
3)广义表形式 ( A(B, C(E,F), D(G) )
4)凹入表示法
2021/8/16
A B
D
CG
EF
A B C E DF G
4
3、 树结构的基本术语
1)结点的度(Degree):为该结点的子树的个数。 2)树的度:为该树中结点的最大度数。
7)路径(Path):若树中存在一个结点序列k1,k2,…,kj,使得ki是 ki+1的双亲(1<=i<j),则称该结点序列是从ki到kj一条路径 (Path)
路径长度:路径的长度为j-1,其为该路径所经过的边的数 目。
A
BCD
EF
G
数据结构树和二叉树知识点总结

数据结构树和二叉树知识点总结
1.树的概念:树是一种非线性的数据结构,由节点和边构成,每个节点只能有一个父节点,但可以有多个子节点。
2. 二叉树的概念:二叉树是一种特殊的树结构,每个节点最多只有两个子节点,一个是左子节点,一个是右子节点。
3. 二叉树的遍历:二叉树的遍历分为前序遍历、中序遍历和后序遍历三种方式。
前序遍历是先访问根节点,再访问左子树,最后访问右子树;中序遍历是先访问左子树,再访问根节点,最后访问右子树;后序遍历是先访问左子树,再访问右子树,最后访问根节点。
4. 二叉搜索树:二叉搜索树是一种特殊的二叉树,它满足左子树中所有节点的值均小于根节点的值,右子树中所有节点的值均大于根节点的值。
因此,二叉搜索树的中序遍历是一个有序序列。
5. 平衡二叉树:平衡二叉树是一种特殊的二叉搜索树,它的左子树和右子树的高度差不超过1。
平衡二叉树的插入和删除操作可以保证树的平衡性,从而提高树的查询效率。
6. 堆:堆是一种特殊的树结构,它分为最大堆和最小堆两种。
最大堆的每个节点的值都大于等于其子节点的值,最小堆的每个节点的值都小于等于其子节点的值。
堆常用于排序和优先队列。
7. Trie树:Trie树是一种特殊的树结构,它用于字符串的匹配和检索。
Trie树的每个节点代表一个字符串的前缀,从根节点到叶子节点的路径组成一个完整的字符串。
以上是数据结构树和二叉树的一些基本知识点总结,对于深入学
习数据结构和算法有很大的帮助。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第六章树和二叉树 6.1树(tree)的概念在日常生活中,可以见到很多情形可以归结为树结构。
如:家族谱系、行政管理机构、DOS和Windows 磁盘文件管理系统等。
我们讨论的树和自然界的树在生长方向上正好相反,它是倒长的树,即根朝上,枝干和叶子朝下。
例1:某家族谱系的一部分例2:国家行政管理机构的一部分例3:DOS和Windows磁盘文件的一部分C:\TC20VC6.0数据结构课件数据结构讲稿第一章第二章……MyTc程序Tc1Tc2……MyVc程序Vc1Vc2……树是一种层次结构,属于非线性结构。
我们学过的线性表可以灵活组织数据,但它受到线性结构的限制,表达层次结构不太方便。
6.1.1树的定义·树T是n(n≥0)个结点的有限集合。
它满足:(1)仅有一个特定的结点,称为根(root)结点;(2)其余结点分为m(m≥0)个互不相交的非空有限集合T,1,T2,……,T m,其中每个集合自身又是一棵树,称为根的子树(subtree)。
·为了表述方便,把没有结点的树称为空树。
·树的定义具有递归性:即一棵树是由根及若干棵子树构成的,而子树又是由根及若干棵子树构成的,……。
表达树的方法通常有4种:树形、凹入、集合和广义表(1) 树形表示法AB C DE F G H(2)凹入表示法ABCEFDGH(3)集合嵌套表示法A○E C○F○G D○H B(4)广义表表示法T(A(B,C(E,F),D(G,H)))6.1.3 树的基本术语为了对树的形态表述清楚和形象,通常引用树和人的特征及术语来描述。
(1)结点和树的度(degree)结点所拥有的子树的个数称为该结点的度,而树中各结点的度的最大值称为该树的度。
AB C DE F G H如:·结点B、E、F、G和H的度数是0·结点C和D的度数都是2·结点A的度数是3;显然3也是树的度数(2)叶子(leaf)结点和分支结点度为0的结点称为叶子结点(终端结点);度不为0的结点称为分支结点(非终端结点)。
一棵树除了叶子结点就是分支节点。
AB C DE F G H如:·结点B、E、F、G和H是叶子结点·结点A、C和D是分支结点(3)孩子(child)结点、双亲(parents又称父亲)结点、兄弟(brother)及堂兄弟结点树中一个结点的子树的根称为该结点的孩子,该结点称为其孩子结点的双亲结点。
同一个双亲的孩子结点互称为兄弟。
双亲在同一层的结点互为堂兄弟。
AB C DE F G H如:·结点B、C和D均为结点A的孩子结点;A是B、C和D的双亲结点·结点E和F为孩子C的结点;C是E和F的双亲结点·结点G和H为孩子D的结点;D是G和H的双亲结点·显然结点A没有双亲结点(因为A不是子树的根)·结点B、C和D互为兄弟;结点E和F互为兄弟;结点G和H互为兄弟。
但结点E、F为一方和G、H 为另一方互为堂兄弟(4)祖先(ancestor)和子孙(descendant)结点的祖先是从根到该所经分支上的所有结点。
反之,以某结点为根的子树中的任一结点称为该结点的子孙。
显然祖先和子孙关系是父子关系的延伸。
AB C DE F G H如:·结点A是结点B、C、D、E、F、G和H的祖先;反之,结点B、C、D、E、F、G和H是的结点A的子孙(5)结点的层数(level)和树的深度(depth,或称高度height)结点的层次从根结点开始算起,根结点的层数为1,其余结点的层数等于其双亲结点的层数加1。
比如,如果某个结点的层数为h,则其子树就在第h+1层。
树中各个结点层数的最大值称为树的深度(高度)。
AB C DE F G H如:·结点A的层数为1;结点B、C和D的层数为2;结点E、F、G和H的层数为3·树的深度(高度)为3。
(6)有序树(orderedtree)和无序树(unorderedtree)若一棵树中结点的各子树从左到右是有次序的,即若交换了某结点各子树的相对位置就构成不同的树,则称这棵树为有序树,否则称为无序树。
(7)路径(path)从树中的一个结点到另一个结点的路途AB C DE F G H如:A-C-E,A-D-H等但B-A-D-G不是路径,因为树不能这样遍历。
(8)森林(forest):m(m≥0)棵互不相交的树的集合AB C DE F G HAB C D树的逻辑关系:(1)树的任一结点都可以有0个或多个直接的后继结点(孩子,这也是非线性的原因),但至多只能有一个直接的前驱结点(双亲结点);(2)只有根结点没有前驱,叶子结点(终端结点)没有后继;(3)祖先与子孙关系是父子关系的延伸,它定义了树中各结点之间的纵向次序;(4)在有向树中,同一组兄弟结点从左至右有长幼之分。
它定义了树中各结点之间的横向次序。
6.1.4树的基本操作常见的操作:建立、遍历、查询、求深度、求结点的双亲和孩子、求树的深度、求结点的层数和判空等。
6.2 二叉树一般的树规律性差,二叉树结构简单,存储和处理相对容易,而且一般的树可以转化为二叉树处理。
6.2.1二叉树的定义·二叉树是n (n ≥0)个结点的有限集合,除了空树(n=0)之外,由一个根结点及两棵不相交的左子树和右子树组成;·二叉树每个结点的度数≤2;·二叉树的定义是一个递归定义。
二叉树有5种基本形态:❶空树 Φ❷只有根结点 ○A❸只有右子树○A ○C❹只有左子树○A○B❺完整二叉树○A○B ○C6.2.2 二叉树的性质性质1:二叉树的第i 层的结点数量最多为)1(21≥-i i 。
证明:第1层的结点数目最多为1(20),第2层的结点数目最多为2(21),……,则第i 层的结点数目最多为21-i 。
性质2:深度为k 的二叉树结点数目最多为)1(12≥-k k。
证明:当其每层的结点数达到最大值时,该二叉树的结点数最多,由性质1可知,深度为k 的二叉树结点数是:122222121......-=++++-kk 。
性质3:在任意二叉树中,若叶子(终端)结点的个数为n 0,度为2的结点数为n 2,则有12+=n n 。
证明:设n 为结点总数,n 1为1度的结点数,则n n n n 21++=(公式1)先分析二叉树的结点度数和分支数的关系: 由于度数为2的结点有两个分支,度数为1的结点有一个分支,度数为0的结点没有分支,所以总的分支数为n n 212+;AB CD E F G此外,再分析二叉树的双亲结点和分支数的关系: 除根结点之外的每个结点都是其双亲结点的一个分支,所以总分支数为1-n ,可得关系式1212-=+n n n ,即1212++=n n n (公式2); 由公式1和2,可得120+=n n ,证毕。
如:叶子数为3(C ,E ,F ),度数为2的结点数为2(A ,B ), 满足性质3。
又如:叶子数为2(F ,G ),度数为2的结点数为1(A ),满足性质3。
●满二叉树的定义:深度为k (k ≥1)且结点数为12k的二叉树。
满二叉树的结点数达到最大值。
如:深度为3的满二叉树结点达到7个●完全二叉树的定义:对于满二叉树的结点,按下列规则编号:❶从根结点开始,自上而下;A1B2 C3D4 E5 F6 G7❷同一层自左至右。
满二叉树的结点编号后,任意取满二叉树的前若干个连续的结点所对应的二叉树,称为完全二叉树。
完全二叉树中,除最后一层外,其余各层均是满的,最后一层,结点连续出现在左边。
如:深度为4的完全二叉树又如:第2层结点不是连续出现在左侧,所以不是完全二叉树再如:第3层未满,所以不是完全二叉树性质4:具有n 个结点的完全二叉树的深度为:1+n log 2(int)。
证明:由完全二叉树和满二叉树的关系可知,一棵深度为k 的完全二叉树的结点数必介于深度为k-1和深度为k 的满二叉树的结点数之间,则有12121-≤<--kk n (取等号的情况是:完全二叉树是深度为k 的满二叉树),由此推出21221kk k n <-≤≤-,即kn k <≤-log 21,所以n k log 2(int)1+=性质5:如果一棵完全二叉树有n 个结点,对所有结点按层次编号(即从上到下),每层从左到右从1开始编号,则对任意结点i (1≤i ≤n ),有: ❶若i=1,则其为根,没有双亲。
若i>1,则其双亲为(int)(i/2);❷若2i ≤n (即它有左子树),则其左子树编号为2i;若2i>n ,则其无左子树。
若2i+1≤n (即它有右子树),则其右子树的编号为2i+1; 若2i+1>n ,则其无右子树。
分析:编号为i=4的结点D,该树的结点数n=10;因i>1,所以其双亲结点是(int)(i/2)=2(即B);又因2i=2*4≤10,所以该结点有左子树,左孩子编号为2i=8(即H);再因2i+1=9≤10,所以该结点有右子树,右孩子编号为2i+1=9(即I)再分析:编号为i=5的结点E,因i>1,所以其双亲结点是(int)(i/2)=2(即B);又因2i=2*5≤10,所以该结点有左子树,左孩子编号为2i=10(即J);再因2i+1=11>10,所以该结点没有右子树。
6.3 二叉树的存储结构常用顺序存储结构和链式存储结构。
6.3.1 二叉树的顺序存储结构·对于完全二叉树进行结点编号后,编号可以反映结点的分支和从属关系,可以将这些结点存入一维数组,编号和数组下标可以对应起来。
·对于一般的二叉树,不易直接采用顺序存储,可以补成完全二叉树后再用顺序存储的方法存储。
以上两点是定义完全二叉树的原因之一。
如:一棵普通二叉树由上图用虚结点(@)补成的完全二叉树再顺序存储位置[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13]结点 A B C @ D E @ @ @ F @ @ G定义:#define MAXSIZE 100typedef char DataType;typedef struct{DataType bt[MAXSIZE+1];int num;}SeqBTree;·顺序存储结构比较适合于完全全二叉树,对于一般的二叉树需要引进虚结点,补成完全二叉树后再顺序存储。
6.3.2 二叉树的链式存储结构结点模式:root定义:typedef struct node A^ B C ^D ^ ^ E^ F ^ ^ G ^lchild data rchild{DataType data;struct node *lchild,*rchild;}BTree;此种定义称为二叉树的二叉链表。