这题我是先用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;
for(i=0; i<m; i++){
scanf("%s is %*s %s of %s\n", x, r,

本文介绍了如何处理家谱问题,通过实现getFamily函数构建孩子兄弟二叉树,并使用findmb函数查找特定关系,特别地,在查找过程中记录了被找到人所在sibling链的最左兄弟。

2477

被折叠的 条评论
为什么被折叠?



