使用二叉树完成家族族谱管理系统c++代码
时间: 2024-10-20 11:12:31 浏览: 23
在C++中,我们可以使用二叉树数据结构来构建一个简单的家族族谱管理系统。通常,每个节点将代表一个人,包含姓名、父母(如果有的话)以及孩子信息。这里是一个基本的示例,展示如何创建一个二叉树节点类以及添加成员到树中:
```cpp
#include <iostream>
using namespace std;
// 家庭成员节点类
class Member {
public:
string name;
Member* parent; // 父亲指针
vector<Member*> children; // 孩子列表
Member(string n) : name(n), parent(nullptr) {}
};
// 二叉搜索树类,用于存储家族成员
class FamilyTree {
private:
Member* root;
public:
FamilyTree() { root = nullptr; }
// 插入新的成员
void addMember(Member* member) {
if (root == nullptr) {
root = member;
} else {
insert(root, member);
}
}
// 递归插入成员到树中
void insert(Member* current, Member* newNode) {
if (newNode->name < current->name) {
if (current->children.empty()) {
current->children.push_back(newNode);
} else {
insert(current->children[0], newNode);
}
} else {
for (auto& child : current->children) {
if (insert(child, newNode)) {
return true; // 成功插入,退出循环
}
}
if (current->children.empty()) {
current->children.push_back(newNode);
}
}
return false;
}
// 打印族谱树(简化版)
void printFamilyTree() {
inOrderTraversal(root);
}
// 中序遍历打印成员名称
void inOrderTraversal(Member* node) {
if (node != nullptr) {
inOrderTraversal(node->children[0]);
cout << node->name << endl;
inOrderTraversal(node->children[1]);
}
}
};
int main() {
FamilyTree family;
Member* grandparent = new Member("祖父");
Member* parent = new Member("父亲");
Member* child1 = new Member("儿子1");
Member* child2 = new Member("女儿2");
family.addMember(grandparent);
family.addMember(parent);
family.addMember(child1);
family.addMember(child2);
family.printFamilyTree(); // 打印家族树
return 0;
}
```
这个例子展示了如何通过二叉搜索树来组织家族成员,并提供了一个基本的打印功能。实际应用中,你可以根据需要扩展这个系统,例如添加查找特定成员、删除成员等功能。
阅读全文