一、树
树的存储结构
双亲表示法
在双亲表示法中,因为每个节点中都有其双亲的数组下标,所以在查找每个节点的双亲和祖先是非常容易的,但找孩子节点或兄弟节点就非常麻烦了。
孩子链表表示法
将每个节点的孩子结点构成一个单链表,称为孩子链表n个节点的数有n个,这样的孩子链表为了方便起见,我们将每个节点存放在一个顺序表中,顺序表的每个元素有两个域,一个是存放该节点的数据值,另一个是存放该节点的第一个孩子的地址,孩子节点也有两个域,一个域是存放该孩子节点在顺序表中的位置(数组下标),另一个域是存放下一个孩子的地址。
孩子兄弟法
孩子兄弟法存储结构是一种二叉链表,链表中每个节点包括三个与数据值和两个指针,其中一个指针指向该节点的最左边第一个孩子,而另一个指针则向该节点的下一个兄弟。
二、二叉树
性质
在二叉树的第n层上至多有2ⁿ-1个结点。
深度为k的二叉树中至多有2ⁿ-1个结点。
在⼀棵二叉树中,除了叶子结点(度为0)之外,就剩下度为2(n2)和1(n1)的结点了。则树的 结点总数为T = n0+n1+n2;在二叉树中结点总数为T,而连线数为T-1。所以有:n0+n1+n2-1 = 2*n2+n1;最后得到n0 = n2+1。
具有 n 个结点的完全二叉树的深度为 [log2n] + 1 向下取整。
如果有一棵有 n 个结点的完全二叉树(其深度为 [log2n] + 1,向下取整)的结点按层次序编号 (从第 1 层到第 [log2n] + 1,向下取整层,每层从左到右),则对任⼀结点 i(1 <= i <= n)有 : 1.如果 i = 1,则结点 i 是二叉树的根,无双亲;如果 i > 1,则其双亲是结点 [i / 2],向下取 整 2.如果 2i > n 则结点 i 无左孩子,否则其左孩子是结点 2i 3.如果 2i + 1 > n 则结点无右孩子,否则其右孩子是结点 2i + 1
存储结构
顺序存储
链式存储
扩展二叉树
二叉排序树(二叉查找树、二叉搜索树) 性质 1、如果他的左子树不空,则左子树上所有结点的值均小于它的根结点的值。 2、若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值。 3、它的左、右树又分为二叉排序树。 很显然,二叉排序树的定义是一个递归形式的定义,所以对于二叉排序树的操作都是基于递归的 形式。 二叉排序树既然名字中带有排序二字,这就是它相对于普通二叉树的优势所在了。