日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/14 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java实现家庭关系图_左孩子右兄弟二叉树实现家族家谱 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

/*

Name: 家譜

Description: 本項(xiàng)目對(duì)家譜管理進(jìn)行簡(jiǎn)單的模擬,以實(shí)現(xiàn)查看祖先和子孫個(gè)人信息、插入家族成員、刪除家族成員等功能。

*/

#include

#include

using namespace std;

//=============樹(shù)的結(jié)點(diǎn)類==================

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); //添加單個(gè)家庭成員

void Print(Node *p); //顯示部分家庭成員

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

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

void Create(Person &L); //創(chuàng)建家譜

Person()

{

root = NULL;

}

private:

Node *root;

};

//===============創(chuàng)建家譜=======================

void Person::Create(Person &L)

{

cout << "請(qǐng)輸入祖先的姓名:";

string rootname;

cin >> rootname;

Node *p = new Node;

p->name = rootname;

L.root = p;

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

}

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

void Person::Add(Person &L)

{

cout << "請(qǐng)輸入要建立家庭的人的名字:";

string rootname;

cin >> rootname;

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

if(s)

{

Node *r = s;

cout << "請(qǐng)輸入:" << s->name << "的兒女人數(shù):";

int n;

cin >> n;

int m = n;

cout << "請(qǐng)請(qǐng)依次輸入"<< 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 << "查無(wú)此人,請(qǐng)重新輸入!" << '\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';

}

//====================添加單個(gè)家庭成員========================

void Person::Insert(Person &L)

{

cout << "請(qǐng)輸入要添加兒子(或女兒)的人的姓名:";

string rootname;

cin >> rootname;

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

if(s)

{

Node *r = s;

cout << "請(qǐng)輸入" << 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 << "查無(wú)此人,請(qǐng)重新輸入!" << '\n';

Person::Insert(L);

}

}

//====================刪除部分家庭成員========================

void Person::Delete(Person &L)

{

cout << "請(qǐng)輸入要解散的家庭的人的姓名";

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 << "查無(wú)此人,請(qǐng)重新輸入!" <

Person::Delete(L);

}

}

//========================家譜成員改名==========================

void Person::Update(Person &L)

{

cout << "請(qǐng)輸入要更改姓名的人的目前姓名:";

string rootname;

cin >> rootname;

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

if(s)

{

cout << "請(qǐng)輸入更改后的姓名:";

string name;

cin >> name;

s->name = name;

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

}

else

{

cout << "查無(wú)此人,請(qǐng)重新輸入!" <

Person::Update(L);

}

}

//========================主函數(shù)============================

int main()

{

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cout << "首先建立一個(gè)家譜!" << '\n';

Person L;

L.Create(L);

char ch;

while(ch!='E')

{

cout << "\n請(qǐng)選擇要執(zhí)行的操作:";

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 << "請(qǐng)輸入正確的操作!" << '\n';

}

}

return 0;

}

總結(jié)

以上是生活随笔為你收集整理的java实现家庭关系图_左孩子右兄弟二叉树实现家族家谱的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。