求用C++表示二叉树 家谱

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

求用C++表示二叉树 家谱,第1张

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

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

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 );

}

}

  族脉家谱是一个免费的个人单机版家谱编纂软件。它继承了“族脉网”原有网络版上的主要服务功能,同时充分利用了个人电脑上的各项特有功能,实现了为用户提供了一个兼而有之、取长补短的第二服务平台。

这款族脉网的用户端软件是利用近几年来最新个人电脑上的软件技术制作的。它无论在数据的存储、处理、以及用户编纂家谱的流程上都做了精心细致的设计。与网络版服务相比,“族脉家谱”单机版软件的长处是反应速度能大大提高了许多,这样在编纂家谱时的用户体验便得到明显改善。

结合“族脉网”的网络服务,我们的用户可以实现所有家谱编纂的功能需求,如无限排版打印、支持多种日历输入、发表抒怀、撰写文选、与亲友交流和设立纪念馆,等等。

  族脉家谱依托的族脉网是一个最俱权威性、集全面数字化编辑功能、和提供家谱、家书、家史、家庭档案、以及缅怀纪念馆的服务网站。“族脉网”为人们在网络世界里提供了一个以家族血脉为线索,积淀历史、缅怀纪念先人、寄托和凝聚情感、激励和启发后人的开放平台。与其它家谱软件或网站相比,“族脉网”提供了一个真正数字化的网络、和单机的双平台环境。

此外,它的服务不提供影印家谱、不灌水、也不暗插木马、更一改纯单机版软件那种“独唱独秀”而无法调动其余成员参与建谱的局面。通过网络和单机这两个平台的有机互动和联系,“族脉网”网络和其“族脉家谱”的服务囊括了世系图谱的编辑,成员、配偶和好友内容的编辑,家谱打印,数据备份、导入,家谱树图的拷贝和粘贴,家谱继承权的移交,隐私保护,乃至家谱与家谱之间相互关联而方便浏览的“亲友链接”,缅怀纪念馆等多项功能。与国外的软件或服务相比,“族脉网”充分考虑了中国家谱对“字辈派语”、“谱牒堂号”、子女排行和成册排序区别、始祖基准动态定位、以及阴阳历日期输入等特别需求。

在打印功能上,“族脉网”还特别解决了对无限量配偶、子女成员的排版打印的经典难题,以及家庭成员之间的“跳转链接”、“世代标注”、以及“辈份优先,家庭一体;成册第一,排行第二”等问题。

  族脉家谱的主要功能如下:

1. 家谱数据录入:如家谱的先公略史、堂号、字辈派语、设定开放状态以保证网络的浏览安全性。

2. 成员数据录入:如成员的名字、世号、字辈、成员、配偶以及好友信息和、成员的重大事记。

3. 家谱操作功能:包括编辑、删除、添加,拷贝及粘贴功能。

4. 搜索排序成员功能:输入家谱成员的关键词查找你需要的成员,以及整理显示和家庭立的排行次序。

5. 统计功能:软件中会自动统计家谱总人数、总辈份、性别、在世人数以及辞世人数。

6. 名人集锦:可以突出家谱成员中有重大地位的成员。

7. 打印功能:将族脉家谱中的数据备份上传到族脉网中可以实现家谱的无限排版打印,如电子书和壁挂图两个格式。

http://wwwcrskycom/soft/31713html您可以下载本软件后打开帮助项,里面有软件的使用说明。

(1) 文件操作功能:记录输入、记录输出,清除全部文件记录和将家谱记录存盘。

(2) 家谱操作功能:用括号表示法输出家谱二叉树,查找某人所有的儿子,查找某人所有的祖先

(3)家谱国际“修谱王”的软件很全面了,可以自己去借鉴一下哈。

数据库这么建就好了

id | belongid | name | img

1 | 0 | 名字A | url //A为根,0代表根级别

2 | 1 | 名字B | url //B为A的分支

3 | 1 | 名字C | url //C为A的分支

4 | 2 | 名字D | url //D为B的分支

1、首先第一排是祖辈,写下祖辈的名字。

2、然后写下每个祖辈的子孙三代,每个家族一支,往下按顺序填写。

3、外围画成波浪半圆形,相关亲戚连枝都连在一起就是整个树状家谱图。

对于一般的家谱树(一般的多叉树)来说,我们可以很清楚的看出层次关系,树的层数表示代数(一共多少代人),树的最后一层表示最后一代人,由于多叉链表法表示的不方便,因此被迫无奈采用孩子兄弟表示法(二叉链表法)

假设我的家谱是这样的:

           

转换成孩子兄弟表示法后是这样的:

           

      我们要做的是:这时我们要找有多少代人,以及最后以一代人出来。

     如果根据第一个图来说找代数就是树的高度,最后一代人就是树的最后一层,二叉链表法中却不如第一个图来的直观,但是只要把握二叉链表法的本质还是很清晰的,根据孩子兄弟表示法的特性,(看二叉链表法的图)结点3的左子树保存的是其孩子,结点3的右子树保存的是其堂兄弟(对照第一个图来看)。假设我们每一个节点都有一个变量用来存储它是第几代的,那么从结点1开始,我们要找结点10是第几代的话,应该这么做:结点1是第一代,然后经过结点5是第二袋,然后看到结点10是第三代。因为第i个结点的左子树是他的孩子,既然是孩子,代数必须+1,而右子树是和第i结点同辈份的(堂兄弟),因此不能加1。本质来说就是往左走代数+1,向右走代数不变。这就是这题目的思路,通过这个方法你就可以知道有多少代人了,且每个节点都有保存了代数信息(用变量存起来了),再次遍历树把最后一代的结点输出即可。清晰了吗?清晰了我就开始写程序。

求用C++表示二叉树 家谱

//是找所有的子孙吗?还是所有儿子 //这里写个所有子孙的吧,所有儿子更容易 void findChild( TreeNode ...
点击下载
热门文章
    确认删除?
    回到顶部