家谱管理系统c儿子兄弟链法删除成员
时间: 2023-10-12 13:04:44 浏览: 58
家谱管理系统中,采用儿子兄弟链法表示家族成员关系。要删除一个成员,需要先遍历家族成员,找到该成员的父亲节点,然后删除该成员在父亲节点的儿子链表中的节点,并释放该成员节点的空间。同时,需要将该成员的所有子孙节点都进行递归删除。具体的代码实现可以参考下面的示例:
```c
// 删除家族成员
void deleteMember(Node *root, char *name)
{
if (root == NULL)
return;
Node *p = findNode(root, name); // 查找要删除的成员节点
if (p == NULL)
return;
Node *father = p->father;
if (father == NULL) // 根节点
{
free(p);
root = NULL;
return;
}
if (father->son == p) // p是其父亲节点的第一个儿子
father->son = p->brother;
else // p是其父亲节点的其他儿子
{
Node *pre = father->son;
while (pre->brother != p)
pre = pre->brother;
pre->brother = p->brother;
}
deleteSubtree(p); // 递归删除p的所有子孙节点
free(p); // 释放p节点的空间
}
```
其中,`findNode` 函数用于在家谱树中查找指定名称的成员节点;`deleteSubtree` 函数用于递归删除指定节点的所有子孙节点。需要注意的是,如果要删除的成员是根节点,则需要特殊处理。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)