「这是我参与2022首次更文挑战的第24天,活动详情查看:2022首次更文挑战」。
线索二叉树
我们将指向前驱和后继的指针称为线索,加上线索的二叉链表称为线索链表,对应的二叉树就称为线索二叉树。
对二叉树以某种次序遍历使其变成线索二叉树的过程成为线索化。
typedef enum {Link,Thread} PointerTag;
typedef struct BithrNode
{
TElemType data;
struct BiehrNode *lchild,*rchild;
PointerTag LTag;
PointerTag RTag;
}BiThrNode, *BithrTree;
线索化的过程就是在遍历的过程中修改空指针的过程。若所用二叉树需经常遍历或查找结点时需要某种遍历序列的前驱和后继,那么采用线索二叉链表的存储就是非常不错的选择。
将树转换为二叉树
在所有兄弟结点之间连线。
对树中每个节点,只保留它与第一个孩子结点的连线,删除其他结点的连线。
以树根节点为中心,将整棵树顺时针旋转,式结构层次分明。
总结:1.加线。2.去线。3.层次调整。
类似还有:
森林转换为二叉树
二叉树转为树
二叉树转为森林
树的复杂性和变化丰富是线性表所不可比拟的,子树,结点,度,叶子,层次,深度,森林等概念需理解。
图
由定点的有穷非空集合和顶点之间边的集合组成。
图是一种较线性表和树更加复杂的数据结构。在图中,结点之间的关系可以是任意的,图中任意两个数据元素之间都可能有关。
图中的数据元素,称为顶点。 有很少条边或弧的图称为稀疏图,反之称为稠密图,与图的边或弧相关的数叫做权,带权的图称为网。
有向图和无向图
无向图中的极大连通子图称为连通分量:
子图是连通的
连通子图含有极大顶点数且包含依附于这些顶点的所有边。
图的邻接矩阵存储方式是用两个数组来表示图。一个一位数组存储图中顶点信息,一个二维数组存储图中的边或弧的信息。