这就是邻接表,就是将每个结点的孩子结点用链表表示出来,再将所有结点以数组形式连起来。
存储树和图我们需要三个数组,h[N], e[N], ne[N],分别表示邻接表,结点值,结点的next值,h[i]是以i为父节点的最后一个插入的结点的地址,e[i]是i结点的序号,next[i]是i的下一个结点的地址。还需要一个变量idx,表示当前需要插入的结点。
例如我们现在有一个需求是将2号结点插入到1号结点下面,变成它的孩子结点。
这就是我们的思路,h数组初始值都为-1,因为没有插入结点(-1就代表空)。
先让2号结点的next值为-1,然后h[1]指向2号结点,这样他们三个就连成一串了。
抽象的用代码实现一下
a->b
void add(int a, int b){
e[idx] = b;
ne[idx] = h[a];
h[a] = idx;
idx ++;
}
这个函数就可以为我们实现添加一条边。