【模板】树的存储

父亲表示法

顾名思义,就是只记录每个结点的父结点。

int n;
int p[MAX_N]; // 指向每个结点的父结点

孩子表示法

如上,就是只记录每个结点的子结点。

int n;
int cnt[MAX_N]; // 记录每个结点的子结点的数量
int p[MAX_N][MAX_CNT]; // 指向每个结点的子结点

父亲孩子表示法

就是同时记录每个结点的父结点和子结点

int n;
int cnt[MAX_N]; // 记录每个结点的子结点的数量
int p[MAX_N]; // 指向每个结点的父结点
int s[MAX_N][MAX_CNT]; // 指向每个结点的子结点

孩子兄弟表示法(二叉树表示法)

这是一个很好的方法,具体就是将树转换成二叉树,左结点指向自己的第一个子结点,右结点指向自己的第一个右兄弟。

转换方法可以看这里

int n;
int lt[MAX_N] // 指向每个结点的第一个子结点;
int rt[MAX_N] // 指向每个结点的第一个右兄弟;

 

猜你喜欢

转载自blog.csdn.net/kcn999/article/details/84536194