求一个C++的家谱二叉树

栏目:资讯发布:2023-10-13浏览:2收藏

求一个C++的家谱二叉树,第1张

#include#includeinti=0;typedefstructtreeNODE{chardata;structtreeNODElchild,rchild,parent;}treenode,tree;///////////////////////////////////////////////////////////////////////////////////////二叉树的建立treecreat(treeroot){charch;ch=getchar();if(ch=='#')root=NULL;else{root=(treenode)malloc(sizeof(treenode));root->data=ch;root->lchild=creat(root->lchild);root->rchild=creat(root->rchild);}returnroot;}//////////////////////////////////////////////////////////////////////////////////////中序遍历voidtraverse(treeroot){if(root){traverse(root->lchild);printf("%c",root->data);traverse(root->rchild);}}//////////////////////////////////////////////////////////////////////////////////////先序遍历voidtraverse1(treeroot){if(root){printf("%c",root->data);traverse(root->lchild);traverse(root->rchild);}}/////////////////////////////////////////////////////////////////////////////////////后序遍历voidtraverse2(treeroot){if(root){traverse(root->lchild);traverse(root->rchild);printf("%c",root->data);}}/////////////////////////////////////////////////////////////////////////////////////////计算叶子数intleaf(treeroot){intnum1=0,num2=0;if(root==NULL)return0;if(root->lchild==NULL&&root->rchild==NULL)return1;else{num1++;leaf(root->lchild);num2++;leaf(root->rchild);returnnum1+num2;}}///////////////////////////////////////////////////////////////////////////////////////结点数intnode(treeroot){intnum1,num2;if(!root)return0;if(root->lchild==NULL&&root->rchild==NULL)return1;else{num1=node(root->lchild);num2=node(root->rchild);}returnnum1+num2+1;}////////////////////////////////////////////////////////////////////////////////////////复制二叉树treecopy(treeroot){treeroot1;//root1=(treenode)malloc(sizeof(treenode));if(!root)returnNULL;{root1=(treenode)malloc(sizeof(treenode));root1->data=root->data;root->lchild=root1->lchild=copy(root->lchild);root->rchild=root1->rchild=copy(root->rchild);returnroot1;}}////////////////////////////////////////////////////////左右子树交换voidchage(treep){treet;if(p==NULL)return;else{chage(p->lchild);chage(p->rchild);t=p->lchild;p->lchild=p->rchild;p->rchild=t;}}///////////////////////////voidmain(){treet=NULL,node1;printf("输入树的数据\n");t=creat(t);printf("中序遍历\n");traverse(t);printf("\n");printf("先序遍历\n");traverse1(t);printf("\n");printf("后序遍历\n");traverse2(t);printf("\n");printf("叶子数%d\n",leaf(t));printf("节点数%d\n",node(t));node1=copy(t);traverse(node1);printf("\n");chage(t);traverse(t);}

一、序

序就类似于现在书的序,可以由族中得望高的人写,也可以由外人写。主要是通过另一个或另几个人的眼光来看待这本族谱。通常情况下,新序在前面,旧的序也要包含在内并排在新序后面。

二、简介

即使是对于自己的家族,能全面了解的人也不多,所以

需要首先简介一下自己家族,可提及的内容有:刻谱凡例、本族谱本次创修(修订)参与人员、时间、为什么要修订;此次编码的依据是什么;家族的整体情况、历史、迁移史、当前分布、人数;本族宗派、字辈,即记录每一代人起名规则;祖坟所在地、祖坟中各代分布图;对祖先事考查、考证。

总之,这里不具体到某一个人,只是对整个家族进行整体描述。

三、人物志

其实一本家谱本身就是人物记录,但通常情况下,家谱中会记录某一个或多个优秀的典型人物或团体。而记录这些优秀人物时,常常格式多样,有该人的传记、他写的文章书稿、获得过的功名、官名、、画像、碑记等。这里需要注意的是千万不能把同姓历史名人强编入本族谱,即使是小小提示也不可。因为后人续谱时,常常会因为这一次信以为真,而以讹传讹。

四、世系表

世系是家谱中最为重要的一项,最简单的家谱,有时只有一个世系表。

世系表是记录家族中每个人的关系,用计算机中的术语,这种一对多的结构是“树”状结构,但实际中的往往会比较复杂。当一个家族很大、人数很多时。会出现嗣出嗣入(通过过继、领养、送人)、迁入迁出的现象。

五、世略表

通常情况下,仅有世系表的家谱其实是没有实际意义的,面对一些不是名人的名字,除了这几个字,你还能知道什么呢一个好的办法就是增加世略表,世略表是记录世系表中每一个族人简历的表。这一部分可以和世系表合二为一,也可以单列。我认为单列更好,因为合二为一,常常导致世系表过肥过大,查找一个成员的时候非常麻烦。

很多家谱中,世略只写到父名、娶妻、生子数及名字数,这样写虽然整体看上去挺规范,实际上也没多大意义,因为世系表本身就可以表示这种信息。我认为世略不一定能做到每个人都有完整的简历,但至少应该有:本人生卒年月、主要职务、职称、主要生活工作地、本人工作简历、主要成绩、妻子姓名、妻子嫁出地、妻子父亲的名、妻子简历、子女名、女儿出嫁地、所嫁人姓名。这样不仅妻方家谱可以通过家谱查到本家族,本家族也可以通过自己家族查到女儿家族。

六、后记

后记写一些感想即可。

(来源:百度经验等)

一个真正好的家族树,应该像样板中这样,成为一个血脉流传的记录,让每一个人可以去比较详细的了解亲人的一生,把每一个人的资料单独管理,各自记录自己的生平自传、相册、私密笔记等,最后通过相互之间的父母子女关系衔接形成树状结构展示出来,同时又可以详细了解每一个人具体的信息。

这是一种文明的体现,如果仅仅活在当下,每个人只关心自己现在好不好,随着时间的流逝,太多精彩都将埋没在时间长河中。。。

用word的“结构组织图”功能。

一、先把绘图工具栏调出来。

右击菜单栏空白处,然后单击“绘图”打上勾,出现绘图工具栏。

二、找到“插入组织结构图”按钮

在绘图工具栏里面有一个箭头和点组成的环状按钮。它就是“插入组织结构图”按钮了。

三、绘图

选择你需要的形状,然后进行编辑。具体编辑方法在此不做赘述。

一个表就够了

id——每个人的id

fid——如果有值 就是父亲的id

hid——如果有值 就是丈夫的id

wid——如果有值 就是妻子的id

其他字段:姓名 性别 出生日期 等等

家谱: 又称族谱、宗谱等。是一种以表谱形式,记载一个家族的世系繁衍及重要人物事迹的书。皇帝的家谱称玉牒,如新朝玉牒、皇宋玉牒。它以记载父系家族世系、人物为中心,由正史中的帝王本纪及王侯列传、年表等演变而来。

在这里通过手机家谱软件可以帮助您清晰的整理家族信息,追根溯源记录家族发展的故事,让家谱可以更好的传承一代又一代,小编在这里为大家整理了手机家谱制作方法,希望能更好的对家谱进行记录。

工具/原料

手机微信端家谱软件

方法/步骤

首先我们需要创建自己的家谱,找到自己的姓氏,根据姓氏创建

家谱创建成功后,可以通过管理家谱,完善家谱资料

添加家族成员资料。

在整理家族成员资料时,我们还可以邀请家族成员一起来完善资料

可以通过微信的分享功能将家谱传播出去,在家谱树中点击右下角分享再点击右上角…选择分享的渠道。可以分享到微信朋友圈、微信好友、QQ空间、QQ好友等不同渠道。分享出去后用户可以查看家谱信息、申请加入家谱、参与完善家谱信息、分享家谱、邀请家谱、查看电子家谱等。

注意:家谱可以设置不同权限,当设置非自由访问的时候,加入会员需要后台审核后才可以有权限查看访问。

在家谱完善过程中,或者完善后可以将某个成员信息点分派到对应的族人管理完善,这样新族人进入后直接有对应点的管理、编辑权限,不用后台审核方便快捷。点击某个分派的点,点击下面的邀请,点击右上角…,选择微信好友分享给他,用户进入家谱后既绑定对应成员点信息,可以对当前成员点进行编辑、添加、删除等操作。

电子家谱书

资料完善后,家谱资料将以电子电子书的形式展示出来,

在家谱树界面右下角点击电子书,确认信息正确后进入家谱电子书。通过手指左右滑动翻页查看,电子书也会自动翻页。

这样一本手机家谱就制作完成了。

//是找所有的子孙吗?还是所有儿子

//这里写个所有子孙的吧,所有儿子更容易

void findChild( TreeNode root, char name, bool flag )

{

if( !root )

{

return ;

}

else if( !lstrcmp( root->name, name ) ) //找到某个人

{

flag = true;

}

if( flag )

{

cout<< root->name<<",";

}

findChild( root->leftChild, name, flag );

findChild( root->rightChild, name, flag );

}

void findParent( TreeNode root, char name, bool flag )

{

if( !root )

{

return false;

}

if( !lstrcmp( root->name, name ) )

{

flag = true;

}

if( flag )

{

findParent( root->parent, name, tag );

cout<<root->name<<",";

}

else

{

findParent( root->leftChild, name, tag );

findParent( root->rightChild, name, tag );

}

}

求一个C++的家谱二叉树

#include#includeinti=0;typedefstructtreeNODE{chardata;structtreeNODElchild,rchild,parent;}treenode,tree;//////////////////////////...
点击下载
热门文章
    确认删除?
    回到顶部