设计一个程序,采用二叉树表示一个家谱关系。大家知道怎么弄吗?
(1) 文件操作功能:记录输入、记录输出,清除全部文件记录和将家谱记录存盘。
(2) 家谱操作功能:用括号表示法输出家谱二叉树,查找某人所有的儿子,查找某人所有的祖先
(3)家谱国际“修谱王”的软件很全面了,可以自己去借鉴一下哈。
杨姓谱牒修撰的历史相当悠久。汉代刘歆在《七略》中提到与他同时的杨雄有《家牒》,而一些古代地方志中摘引的《家牒》片断涉及杨雄身后世。《世说新语》刘孝标注提到数十种南朝士族家谱,其中有《杨氏谱》。《隋书经籍志·谱系类》录有:《杨氏血脉谱》2卷,《杨氏家谱状并墓记》1卷,《杨氏支分谱》1卷,《杨氏谱》1卷。此外,古籍中还提到北齐有佚名的《杨愔家传》。以杨姓和王姓等为多,南北朝时的杨姓大族,已有编撰家谱之风。
民国十二年(1923年)杨姓重新立宗续谱字辈:登、成、永、宏、福、生、考、义、和、平十字排辈为序。 近代杨贵德等在桐梓县娄山关镇虎峰山杨价崇德庙开会讨论百字谱: 弘农俊杰英、荣华泽祥祯、文武科举锦、福禄宁康兴、太师忠书令、唐宋才嘉兵、汉隋相尉权、崇德怀仁君、兰桂照辉映、侯州尽雄伟、盛海波涛涌、觉理冲凌云、启后继乾坤、慎思贵富民、树以成良言、勋著永绵传、严洁孝顺模、喜庆辅龙腾、昌发山西籍、源远承家业。 后修改为:三知承俊杰、荣华泽祥祯、汉隋相尉才、盛德怀仁君、文武科举锦、唐宋建奇勋、太师奉旨令、侯州忆雄英、沧海波涛涌、虎跃起龙腾、满门忠烈鼎、丰功壮凌云、慎思传清白、后裔靖康宁、兰桂照辉映、福禄显家声、昭著千秋范、源远伟业兴、廉洁行孝顺、继发晋乾坤。
#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);}
设计一个程序,采用二叉树表示一个家谱关系。大家知道怎么弄吗?
本文2023-10-05 21:57:34发表“资讯”栏目。
本文链接:https://www.lezaizhuan.com/article/184277.html