寻根溯源我的家族树手抄报 我的家手抄报
有关家族树的手抄报树的手抄报
关于我爱我家的手抄报家有亲情树 幸福手抄报
陈姓家族的发展变迁史手抄报 关于民族的手抄报
我的家族树绘画手抄报我的家乡手抄报
小学生家谱树手抄报小学生手抄报
树家风传家训手抄报
寻根溯源 中华情---家谱制作手抄报
五年级家族树手抄报 五年级手抄报
家庭树手抄报 植树手抄报-
家族根脉传承图手抄报 传承家风手抄报
家族根脉图手抄报手抄报大全
传承家风之魂寻找祖先之根手抄报 传承家风手抄报
树家风传家训手抄报内容
有关家庭树的手抄报 树的手抄报
寻根溯源 中华情---家谱制作手抄报传统文化手抄报
追根溯源讲先锋故事手抄报 雷锋故事手抄报
对于一般的家谱树(一般的多叉树)来说,我们可以很清楚的看出层次关系,树的层数表示代数(一共多少代人),树的最后一层表示最后一代人,由于多叉链表法表示的不方便,因此被迫无奈采用孩子兄弟表示法(二叉链表法)
对于一般的家谱树(一般的多叉树)来说,我们可以很清楚的看出层次关系,树的层数表示代数(一共多少代人),树的最后一层表示最后一代人,由于多叉链表法表示的不方便,因此被迫无奈采用孩子兄弟表示法(二叉链表法)
假设我的家谱是这样的:
转换成孩子兄弟表示法后是这样的:
我们要做的是:这时我们要找有多少代人,以及最后以一代人出来。
如果根据第一个图来说找代数就是树的高度,最后一代人就是树的最后一层,二叉链表法中却不如第一个图来的直观,但是只要把握二叉链表法的本质还是很清晰的,根据孩子兄弟表示法的特性,(看二叉链表法的图)结点3的左子树保存的是其孩子,结点3的右子树保存的是其堂兄弟(对照第一个图来看)。假设我们每一个节点都有一个变量用来存储它是第几代的,那么从结点1开始,我们要找结点10是第几代的话,应该这么做:结点1是第一代,然后经过结点5是第二袋,然后看到结点10是第三代。因为第i个结点的左子树是他的孩子,既然是孩子,代数必须+1,而右子树是和第i结点同辈份的(堂兄弟),因此不能加1。本质来说就是往左走代数+1,向右走代数不变。这就是这题目的思路,通过这个方法你就可以知道有多少代人了,且每个节点都有保存了代数信息(用变量存起来了),再次遍历树把最后一代的结点输出即可。清晰了吗?清晰了我就开始写程序。
C++语言: 二叉树实现的简单家谱树
/
File Name: BiTreecpp
Author: Geng Lequn[glq2000@126com]
Thur July 1 2010
Discription: 建立二叉家谱树,实现输入任意两个人的名字,查找得到其关系
/
#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <vector>
#include <mathh>
using namespace std;
typedef struct _Node
{
string sex; //性别 m 男; f 女
string name; //此人的姓名
string spause; //配偶的姓名
unsigned short level; //层次 辈分最高一层为1,下一层为为2,以此类推
struct _Node l_child; //指向其第一个孩子的指针
struct _Node r_brother; //指向其某一个兄弟姐妹的指针, 即左孩子为其后代,右孩子为其兄弟姐妹
struct _Node btr; //指向其父亲或者母亲的指针
_Node():level(0),l_child(NULL),r_brother(NULL),btr(NULL){cout<<"constructor"<<endl;}
~_Node(){cout<<name<<" destructor"<<endl;}
}Node, PNode;
void CreateBiTreePreOrder(PNode &pn, PNode pback, unsigned short depth);//建立二叉家谱树,以先序方式
void VisitBiTreePreOrder(PNode root); //前序遍历此二叉树
void TellRelation(PNode root); //判断两人关系
void DestroyBiTreePostOrder(PNode root); //销毁二叉树,释放节点占用的空间
void FindPersonMiddleOrder(PNode root, string name, PNode &presult); //返回家谱中指向某人的指针,找不到返回NULL
Node root=NULL; //全局变量,二叉树的根节点
unsigned findPersonFlag = 0; //标志位,0 没找到; 1 找到,找到后就不再搜索直接返回;利用此flag可避免将整个tree遍历一遍(若该name在tree中存在的话)
int main()
{
cout<<"请按先序遍历的顺序根据提示输入家谱信息,不存在则输入\"#\""<<endl;
CreateBiTreePreOrder(root, NULL, 1);//建立二叉家谱树,以先序方式
VisitBiTreePreOrder(root); //前序遍历此二叉树
TellRelation(root); //判断两人关系
DestroyBiTreePostOrder(root); //销毁二叉树
getchar();getchar();getchar();
return 0;
}
/
function:建立二叉家谱树,以先序方式
argument:
pn: 指向二叉树节点的引用
pback: pn这个节点的btr指针的值,即指向其parent的指针
depth: 该节点的层次,分最高一层为1,下一层为为2,以此类推
/
void CreateBiTreePreOrder(PNode &pn, PNode pback, unsigned short depth)
{
string str;
cin>>str; //输入该人信息,格式是 sex-name-spausename,如不存在则输入#
if(str == "#") //如: M-tom-marry, 表示此人叫tom, 男性, 配偶名字marry
{
pn = NULL;
return;
}
//如果是自定义的struct/class,应该使用构造函数。如果是内建数据类型,
//比如int,应该memset。 当然,更好的建议是使用vector取代new出来的数组
pn = new Node;
//处理输入的字符串
vector<string> v;
for(size_t b=0, e=strfind('-'); ; e=strfind('-', b))
{
if(e == string::npos)
{
vpush_back(strsubstr(b));
break;
}
else
vpush_back(strsubstr(b, e-b));
b = e+1;
}
//初始化该节点
pn->sex = v[0];
pn->name = v[1];
pn->spause = v[2];
pn->btr = pback;
pn->level = depth;
//递归建立左右子树的节点
CreateBiTreePreOrder(pn->l_child, pn, depth+1); //注意后两个参数的值
CreateBiTreePreOrder(pn->r_brother, pback, depth); //注意后两个参数的值
}
/
function: 前序遍历此二叉树
/
void VisitBiTreePreOrder(PNode pn)
{
if(!pn)
return;
cout<<endl<<"sex:"<<pn->sex<<endl;
cout<<"name:"<<pn->name<<endl;
cout<<"spause:"<<pn->spause<<endl;
cout<<"level:"<<pn->level<<endl;
cout<<"father's name:"<<((pn->btr == NULL)"NULL":pn->btr->name)<<endl;
cout<<"======================"<<endl;
VisitBiTreePreOrder(pn->l_child);
VisitBiTreePreOrder(pn->r_brother);
}
/
function: 中序遍历找到家谱中的一个人,返回其指针,若找不到,返回NULL
isSpause 1表示是找到的节点的配偶 0表示不是所找到的节点的配偶
/
void FindPersonMiddleOrder(PNode pn, string name, PNode &presult)
{
if(!pn)
return;
FindPersonMiddleOrder(pn->l_child, name, presult);
if(findPersonFlag) return;
if(name == pn->name || name == pn->spause)
{
presult = pn;
findPersonFlag = 1; //全局标志位,0 没找到; 1 找到,找到后就不再搜索直接返回;利用此全局flag可避免将整个tree遍历一遍(若该name在tree中存在的话)
return; //下次使用前不要忘记置为0
}
FindPersonMiddleOrder(pn->r_brother, name, presult);
}
/
function: 判断两人关系,若两人中至少一人不在树中,则两人无关系
若两人在树中,先判断两人是否同层次,若同层,判断是否是亲兄弟姐妹;
若不同层,设辈分大的人为A,辈分小的人为B,判断A和B是亲的还是表的,
比如,A为男性,且比B大一倍,判断A是否为B的爸爸,或亲叔叔(舅舅),或表叔叔(舅舅)
简单起见,此处没有区分是叔叔还是舅舅
比如,A为男性,且比B大两倍,判断A是否为B的亲爷爷(姥爷),或亲爷爷(姥爷)的亲兄弟
,或亲爷爷(姥爷)的表兄弟
简单起见,此处没有区分是叔叔和舅舅等做进一步区分
简单起见,查询时只输入节点中的name,不查询spause,否则处理起来太麻烦
/
void TellRelation(PNode pn)
{
string name1, name2;
//p1指向name1, p2指向name2, pbig指向辈分大的,psmall指向辈分小的
PNode p1 = NULL, p2 = NULL, pbig = NULL, psmall = NULL;
int differ = 0; //两人辈分数的差别
string title;
Label:
cout<<endl<<"输入想查询关系的两个人的名字,不想查则将两人名字输成#:"<<endl;
while(cin>>name1 && cin>>name2)
{
if(name1=="#" && name2=="#") return;
p1 = NULL; p2 = NULL; //因为程序是循环执行的,需要将上次遗留的值清掉
findPersonFlag = 0;
FindPersonMiddleOrder(root, name1, p1);
findPersonFlag = 0;
FindPersonMiddleOrder(root, name2, p2);
if(!p1 || !p2) //若有一个为空或都为空,说明至少有一个人不在家谱中,故两人无亲缘关系
{
cout<<name1<<((!p1)" 不在":" 在")<<" 家谱树中"<<endl;
cout<<name2<<((!p2)" 不在":" 在")<<" 家谱树中"<<endl;
cout<<name1<<" 和 "<<name2<<" 间没有关系"<<endl<<endl;
goto Label;
}
differ = (int)abs(p1->level - p2->level);
if(!differ) //辈分一样大
{
if(p1->sex == p2->sex)
{
if(p1->sex == "M") title = "兄弟关系";
else title = "姐妹关系";
}
else title = "兄妹(姐弟)关系";
if(p1->btr == p2->btr) //parent相同
cout<<name1<<" 和 "<<name2<<" 间是 "<<" 亲 "<<title<<endl;
else
cout<<name1<<" 和 "<<name2<<" 间是 "<<" 表 "<<title<<endl;
}
else //辈分不一样大
{
if(p1->level < p2->level) {pbig = p1; psmall = p2;}
else {pbig = p2; psmall = p1;}
switch(differ)
{
case 1:
if(psmall->btr == pbig)
title = ((pbig->sex == "M")"爸爸":"妈妈");
else
{
if(psmall->btr->btr == pbig->btr)
title = ((pbig->sex == "M")"亲叔(舅)":"亲姑(姨)");
else
title = ((pbig->sex == "M")"表叔(舅)":"表姑(姨)");
}
break;
case 2:
if(psmall->btr->btr == pbig)
title = ((pbig->sex == "M")"爷爷(姥爷)":"奶奶(姥姥)");
else
{
string tmp = ((pbig->sex == "M")"兄弟":"姐妹");
if(psmall->btr->btr->btr == pbig->btr)
title = ((psmall->btr->btr->sex == "M")"爷爷(姥爷)的亲":"奶奶(姥姥)的亲") + tmp;
else
title = ((psmall->btr->btr->sex == "M")"爷爷(姥爷)的表":"奶奶(姥姥)的表") + tmp;
}
break;
default:
string tmp2;
PNode pt = psmall;
int n = differ-2; //计算"老"字 (即grand这个字) 出现的个数
for(int i=0; i<n; ++i)
tmp2 += "老";
for(int i=0; i<differ; ++i)
pt = pt->btr;
if(pt == pbig)
title = tmp2 + ((pbig->sex == "M")"爷爷(姥爷)":"奶奶(姥姥)");
else
{
string tmp3 = ((pbig->sex == "M")"兄弟":"姐妹");
if(pt->btr == pbig->btr)
{title = tmp2 + ((pt->sex == "M")"爷爷(姥爷)的亲":"奶奶(姥姥)的亲"); title+=tmp3;}
else
{title = tmp2 + ((pt->sex == "M")"爷爷(姥爷)的表":"奶奶(姥姥)的表"); title+=tmp3;}
}
break;
}
cout<<pbig->name<<" 是 "<<psmall->name<<" 的 "<<title<<endl;
}
goto Label;
}
}
/
function: 后序遍历销毁此二叉树,释放节点占用的内存空间
/
void DestroyBiTreePostOrder(PNode pn)
{
if(!pn) return;
DestroyBiTreePostOrder(pn->l_child);
DestroyBiTreePostOrder(pn->r_brother);
delete pn;
}
家谱: 又称族谱、宗谱等。是一种以表谱形式,记载一个家族的世系繁衍及重要人物事迹的书。皇帝的家谱称玉牒,如新朝玉牒、皇宋玉牒。它以记载父系家族世系、人物为中心,由正史中的帝王本纪及王侯列传、年表等演变而来。
在这里通过手机家谱软件可以帮助您清晰的整理家族信息,追根溯源记录家族发展的故事,让家谱可以更好的传承一代又一代,小编在这里为大家整理了手机家谱制作方法,希望能更好的对家谱进行记录。
工具/原料
手机微信端家谱软件
方法/步骤
首先我们需要创建自己的家谱,找到自己的姓氏,根据姓氏创建
家谱创建成功后,可以通过管理家谱,完善家谱资料
添加家族成员资料。
在整理家族成员资料时,我们还可以邀请家族成员一起来完善资料
可以通过微信的分享功能将家谱传播出去,在家谱树中点击右下角分享再点击右上角…选择分享的渠道。可以分享到微信朋友圈、微信好友、QQ空间、QQ好友等不同渠道。分享出去后用户可以查看家谱信息、申请加入家谱、参与完善家谱信息、分享家谱、邀请家谱、查看电子家谱等。
注意:家谱可以设置不同权限,当设置非自由访问的时候,加入会员需要后台审核后才可以有权限查看访问。
在家谱完善过程中,或者完善后可以将某个成员信息点分派到对应的族人管理完善,这样新族人进入后直接有对应点的管理、编辑权限,不用后台审核方便快捷。点击某个分派的点,点击下面的邀请,点击右上角…,选择微信好友分享给他,用户进入家谱后既绑定对应成员点信息,可以对当前成员点进行编辑、添加、删除等操作。
电子家谱书
资料完善后,家谱资料将以电子电子书的形式展示出来,
在家谱树界面右下角点击电子书,确认信息正确后进入家谱电子书。通过手指左右滑动翻页查看,电子书也会自动翻页。
这样一本手机家谱就制作完成了。
族脉家谱是一个免费的个人单机版家谱编纂软件。它继承了“族脉网”原有网络版上的主要服务功能,同时充分利用了个人电脑上的各项特有功能,实现了为用户提供了一个兼而有之、取长补短的第二服务平台。
这款族脉网的用户端软件是利用近几年来最新个人电脑上的软件技术制作的。它无论在数据的存储、处理、以及用户编纂家谱的流程上都做了精心细致的设计。与网络版服务相比,“族脉家谱”单机版软件的长处是反应速度能大大提高了许多,这样在编纂家谱时的用户体验便得到明显改善。
结合“族脉网”的网络服务,我们的用户可以实现所有家谱编纂的功能需求,如无限排版打印、支持多种日历输入、发表抒怀、撰写文选、与亲友交流和设立纪念馆,等等。
族脉家谱依托的族脉网是一个最俱权威性、集全面数字化编辑功能、和提供家谱、家书、家史、家庭档案、以及缅怀纪念馆的服务网站。“族脉网”为人们在网络世界里提供了一个以家族血脉为线索,积淀历史、缅怀纪念先人、寄托和凝聚情感、激励和启发后人的开放平台。与其它家谱软件或网站相比,“族脉网”提供了一个真正数字化的网络、和单机的双平台环境。
此外,它的服务不提供影印家谱、不灌水、也不暗插木马、更一改纯单机版软件那种“独唱独秀”而无法调动其余成员参与建谱的局面。通过网络和单机这两个平台的有机互动和联系,“族脉网”网络和其“族脉家谱”的服务囊括了世系图谱的编辑,成员、配偶和好友内容的编辑,家谱打印,数据备份、导入,家谱树图的拷贝和粘贴,家谱继承权的移交,隐私保护,乃至家谱与家谱之间相互关联而方便浏览的“亲友链接”,缅怀纪念馆等多项功能。与国外的软件或服务相比,“族脉网”充分考虑了中国家谱对“字辈派语”、“谱牒堂号”、子女排行和成册排序区别、始祖基准动态定位、以及阴阳历日期输入等特别需求。
在打印功能上,“族脉网”还特别解决了对无限量配偶、子女成员的排版打印的经典难题,以及家庭成员之间的“跳转链接”、“世代标注”、以及“辈份优先,家庭一体;成册第一,排行第二”等问题。
族脉家谱的主要功能如下:
1. 家谱数据录入:如家谱的先公略史、堂号、字辈派语、设定开放状态以保证网络的浏览安全性。
2. 成员数据录入:如成员的名字、世号、字辈、成员、配偶以及好友信息和、成员的重大事记。
3. 家谱操作功能:包括编辑、删除、添加,拷贝及粘贴功能。
4. 搜索排序成员功能:输入家谱成员的关键词查找你需要的成员,以及整理显示和家庭立的排行次序。
5. 统计功能:软件中会自动统计家谱总人数、总辈份、性别、在世人数以及辞世人数。
6. 名人集锦:可以突出家谱成员中有重大地位的成员。
7. 打印功能:将族脉家谱中的数据备份上传到族脉网中可以实现家谱的无限排版打印,如电子书和壁挂图两个格式。
http://wwwcrskycom/soft/31713html您可以下载本软件后打开帮助项,里面有软件的使用说明。
宋氏族谱字辈树字辈后面是煌字辈。
具体为:熙域钟汤本,材辉执镜清,凌梯熏坦镒,锡泽树煌坤,培锦江林焕,焌增钰沚森,模炘垂鉴永,汝梓炤基铭。
清初,后裔迁居江西萍乡、万载、湖南浏阳、醴陵等地:如登兴公于雍正2年(1724年)迁浏南俏雅里;周策公于康熙45年(1706年)迁浏西探骊湖,即浏阳市普迹镇;仁璋公于乾隆间迁浏北中嘴岭;达贤公于乾隆间迁浏北大步石。
云辉公于康熙50年(1711年)迁醴北大杨坑;登卿公于康熙间迁浏南大坡;兆发公于康熙初年迁浏东赤塘;名景公于雍正间迁醴北桃花。三邑共建宗祠于俏雅里。宗谱创修于道光13年(1833年),光绪4年(1878年)续修,宣统2年(1910年)三修。
源流考纪:
南宋绍兴年间,我祖新恩宋公年方十八,志气超人。携款千金来广东惠州长乐琴江(今梅州五华琴口)都中正约。据族谱记载,本地住民秀才要支省城参加乡试,但缺少费用不能成行。
新恩公解囊相助,唐秀才赴省考试,果然金榜题名,考中解元。唐解元衣锦还乡,见新恩公品格清奇,气宇轩昂,遂将第三女唐氏三娘许配给新恩公为妻。后家景逐渐殷实,每行恤苦怜贫,账济乡邻之善。众口皆碑,深得乡民的一致好评。
以上内容参考 -广东宋氏家谱
寻根溯源我的家族树手抄报 我的家手抄报
本文2023-09-22 03:33:08发表“资讯”栏目。
本文链接:https://www.lezaizhuan.com/article/22533.html