欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

java实现家庭关系图_左孩子右兄弟二叉树实现家族家谱

发布时间:2023/12/14 32 豆豆
生活随笔 收集整理的这篇文章主要介绍了 java实现家庭关系图_左孩子右兄弟二叉树实现家族家谱 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

/*

Name: 家谱

Description: 本项目对家谱管理进行简单的模拟,以实现查看祖先和子孙个人信息、插入家族成员、删除家族成员等功能。

*/

#include

#include

using namespace std;

//=============树的结点类==================

class Node

{

friend class Person;

public:

Node()

{

name = '?';

lchild = NULL;

rchild = NULL;

}

private:

string name;

Node *lchild;

Node *rchild;

};

//============家谱成员类===================

class Person

{

public:

void Update(Person &L); //家谱成员改名

void Delete(Person &L); //删除部分家庭成员

void Insert(Person &L); //添加单个家庭成员

void Print(Node *p); //显示部分家庭成员

Node *Lookup(Node *p,string name);//查找某人

void Add(Person &L); //添加部分家庭成员

void Create(Person &L); //创建家谱

Person()

{

root = NULL;

}

private:

Node *root;

};

//===============创建家谱=======================

void Person::Create(Person &L)

{

cout << "请输入祖先的姓名:";

string rootname;

cin >> rootname;

Node *p = new Node;

p->name = rootname;

L.root = p;

cout << "此家谱的祖先是:"<< p->name <

}

//================添加部分家庭成员====================

void Person::Add(Person &L)

{

cout << "请输入要建立家庭的人的名字:";

string rootname;

cin >> rootname;

Node *s = Person::Lookup(L.root,rootname);

if(s)

{

Node *r = s;

cout << "请输入:" << s->name << "的儿女人数:";

int n;

cin >> n;

int m = n;

cout << "请请依次输入"<< s->name << "的儿女的姓名:";

//左孩子,右兄弟

while(m)

{

Node *q = new Node;

string name;

cin >> name;

q->name = name;

if(m == n)

{

s->lchild = q;

s = s->lchild;

}

else

{

s->rchild = q;

s = s->rchild;

}

m--;

}

Person::Print(r);

}

else

{

cout << "查无此人,请重新输入!" << '\n';

Person::Add(L);

}

}

//====================查找某人===============================

Node * Person::Lookup(Node *p,string name)

{

Node *t = NULL;

Node *s[100];

int top = 0;

while(p || top > 0)

{

while(p)

{

if(p->name == name)

{

t = p;

}

s[++top] = p;

p = p->lchild;

}

p = s[top--];

p = p->rchild;

}

return t;

}

//====================显示部分家庭成员=======================

void Person::Print(Node *p)

{

cout << p->name << "的第一代子孙是:" <lchild->name << '\t';

p = p->lchild;

while(p->rchild)

{

cout << p->rchild->name <

p = p->rchild;

}

cout << '\n';

}

//====================添加单个家庭成员========================

void Person::Insert(Person &L)

{

cout << "请输入要添加儿子(或女儿)的人的姓名:";

string rootname;

cin >> rootname;

Node *s = Person::Lookup(L.root,rootname);

if(s)

{

Node *r = s;

cout << "请输入" << s->name << "新添加的儿子(或女儿)的姓名:";

Node *p = new Node;

string name;

cin >> name;

p->name = name;

if(!s->lchild)

{

s->lchild = p;

}

else

{

s = s->lchild;

while(s->rchild)

{

s = s->rchild;

}

s->rchild = p;

}

Person::Print(r);

}

else

{

cout << "查无此人,请重新输入!" << '\n';

Person::Insert(L);

}

}

//====================删除部分家庭成员========================

void Person::Delete(Person &L)

{

cout << "请输入要解散的家庭的人的姓名";

string rootname;

cin >> rootname;

Node *s = Person::Lookup(L.root,rootname);

if(s)

{

if(s->lchild)

{

cout << "要解散家庭的人是:" <name <

Person::Print(s);

s->lchild = NULL;

}

else

{

cout << s->name << "尚未有家庭!";

}

}

else

{

cout << "查无此人,请重新输入!" <

Person::Delete(L);

}

}

//========================家谱成员改名==========================

void Person::Update(Person &L)

{

cout << "请输入要更改姓名的人的目前姓名:";

string rootname;

cin >> rootname;

Node *s = Person::Lookup(L.root,rootname);

if(s)

{

cout << "请输入更改后的姓名:";

string name;

cin >> name;

s->name = name;

cout << rootname << "已更改为:" << s->name << '\n';

}

else

{

cout << "查无此人,请重新输入!" <

Person::Update(L);

}

}

//========================主函数============================

int main()

{

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cout << "首先建立一个家谱!" << '\n';

Person L;

L.Create(L);

char ch;

while(ch!='E')

{

cout << "\n请选择要执行的操作:";

cin >> ch;

switch(ch) {

case 'A':

{

L.Add(L);

break;

}

case 'B':

{

L.Insert(L);

break;

}

case 'C':

{

L.Delete(L);

break;

}

case 'D':

{

L.Update(L);

break;

}

case 'E':

break;

default:

cout << "请输入正确的操作!" << '\n';

}

}

return 0;

}

总结

以上是生活随笔为你收集整理的java实现家庭关系图_左孩子右兄弟二叉树实现家族家谱的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。