这题我是先用getFamily函数读取家谱,保存为一棵孩子兄弟二叉树,然后在找人确定关系。为找寻兄弟节点是,在findmb这个找人函数多加了写东西。在找人的时候,可以把找到的人所在sibling链最左端的兄弟保存在ppmb_ls里。
<span style="font-size:18px;">#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <stdbool.h>
#include <assert.h>
int n, m;
typedef struct mb_s{// member
char name[11];
struct mb_s *sibl, *chld;
int marg; // margin
}mb_t;
mb_t* mb;
mb_t* getFamily();
bool checkcp(char x[], char y[]); // check child parent relatinship
bool checkda(char x[], char y[]); // check descendant ancestor relationship
bool checks(char x[], char y[]); // check sibling relationship
int main()
{
scanf("%d%d", &n, &m);
mb = getFamily();
assert(mb->name != NULL);
char x[11], y[11], r[11]; // relationship
int i;