树
数据结构可以分为:线型结构,树型结构,图类型结构三大类。线性表,堆栈串数组都是线性结构。树型结构是 每一个结点中只允许有一个直接前驱结点,但允许有多个直接后继节点的。
树的定义:树是有n(n>=0)个结点构成的集合。n=0称为空树:
有一个特殊结点称为根结点,根结点没有前驱结点。
当n>1时,除跟结点外其他结点被分成m(m>0)个互不相交的集合T1,T2......Tm其中每一个结合本身又是一颗结构和树类同的子树。
树是一种递归形式的结构。
名词定义:
结点:是有数据元素和构造数据元素之间关系的指针组成的数据结构。
结点的度:树节点拥有的子树的个数。
页结点:叶结点度为0,既是没有子树的结点称为叶结点也是终端结点。
分支结点:度不为0,既是有子树的结点。
孩子结点:既是后继结点。
双亲结点:一个结点的父结点称为双亲结点。
兄弟结点:具有相同双亲结点的结点称为兄弟结点
树的度:树中所有的结点的度最大那个称为树的度
结点的层次:从根结点到某一个结点经过的层次称为结点的层次
树的深度:树的最大层次数。
无序树:树的各个子树是可以任意交换的,不会构成不同的树。
有序树: 各子树从左到右是有序的,交换了某一个结点,树树不相同的。
树的表示方法:
凹入法:
A
B
E
C
F
F
D
G
H
K
树的抽象数据类型:
数据集合:树的结点集合,每一个结点由数据元素和构造数据之间关系的指针组成。
树的操作集合:
创建树T
删除树T
双亲结点:
左孩子结点
右兄弟结点
遍历树
树的存储结构:
树的表示方法主要有:
双亲表示法,双亲孩子表示法,孩子表示法,孩子兄弟表示法
可以使用链表构造一个树。
双亲表示法:
每一个结点有两个域,一个数据域,一个指向双亲的指针域。
双亲表示法查找寻找一个结点的双亲很方便,但对于寻找孩子结点不方便,这种结构如网站目录表。
孩子结点:
就是双亲结点包含一个孩子结点的所有指针,这种方法实现比较麻烦因为,孩子是不固定的。
双亲孩子结点:既是每一个结点包含双亲结点和孩子结点
孩子兄弟结点:既是每个结点包含孩子结点和兄弟结点
孩子兄弟结点是最常用的存储结构,实现二叉树是非常便利的。