问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

请好心人帮忙用C数据结构做一个程序实现二叉家族树的建立与输出

发布网友 发布时间:2023-07-17 22:43

我来回答

1个回答

热心网友 时间:2024-11-29 08:46

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MaxWidth 40
#define MaxSize 30
typedef struct treenode
{
char name[10];
struct treenode *left,*right;
} *BTree;
BTree findfather(BTree p,char xm[])
{
BTree bt;
if(p==NULL) return(NULL);
else
{
if(strcmp(p->name,xm)==0)
return(p);
else
{
bt=findfather(p->left,xm);
if(bt!=NULL) return(bt);
else return(findfather(p->right,xm));
}
}
}
BTree creatree()
{
int n,m,i,contin=1,first=1;
char xm[10];
BTree btree,s,t,p;
printf("\n建立一个家谱二叉树(以空格结尾):\n");
while(contin)
{
if(first==1)
{
btree=(BTree)malloc(sizeof(struct treenode));
printf("\t姓名:");
gets(btree->name);
btree->right=NULL;
s=(BTree)malloc(sizeof(struct treenode));
printf("\t妻子:");
gets(s->name);
s->left=s->right=NULL;
btree->left=s;
first=0;
}
else
{
printf("\t父亲:");
gets(xm);
if(strcmp(xm," ")==0)
contin=0;
else
{
p=findfather(btree,xm);
if(p!=NULL)
{
p=p->left;
if(p==NULL) /*没有妻子*/
printf("\t没有儿子(因为没有妻子)\n");
else
{
while(p->right!=NULL) p=p->right;
s=(BTree)malloc(sizeof(struct treenode));
s->right=NULL;
p->right=s;
printf("\t儿子:");
gets(s->name);
printf("\t儿妻:");
gets(xm);
if(strcmp(xm,"")!=0)
{
t=(BTree)malloc(sizeof(struct treenode));
strcpy(t->name,xm);
t->left=t->right=NULL;
s->left=t;
}
else s->left=NULL;
}
}
else printf("不存在这样的父结点!\n");
}
}
}
return(btree);
}
void disptree(BTree BT)
{
BTree stack[MaxSize],p;
int level[MaxSize][2],top,n,i,width=4;
if(BT!=NULL)
{
printf("\n家谱凹入表示法:\n");
top=1;
stack[top]=BT; /*根结点入栈*/
level[top][0]=width;
while (top>0)
{
p=stack[top]; /*退栈并凹入显示该结点值*/
n=level[top][0];
for (i=1;i<=n;i++) /*其中n为显示场宽,字符以右对齐显示*/
printf(" ");
printf("%6s",p->name);
for(i=n+1;i<=MaxWidth-6;i+=2)
printf("━");
printf("\n");
top--;
if(p->right!=NULL)
{ /*将右子树根结点入栈*/
top++;
stack[top]=p->right;
level[top][0]=n+width; /*显示场宽增width*/
level[top][1]=2;
}
if (p->left!=NULL)
{ /*将左子树根结点入栈*/
top++;
stack[top]=p->left;
level[top][0]=n+width; /*显示场宽增width*/
level[top][1]=1;
}
}
}
}
void findson(BTree bt)
{
char xm[10];
BTree p;
printf("\n查找指定父亲的所有儿子\n");
printf("父亲:");
gets(xm);
p=findfather(bt,xm);
if(p==NULL)
printf("不存在%s的父亲!\n",xm);
else
{
p=p->left;
p=p->right;
if(p==NULL)
printf("%s没有儿子!\n",xm);
else
{
printf("%s有以下儿子!\n\t");
while(p!=NULL)
{
printf("%8s ",p->name);
p=p->right;
}
}
}
}
main()
{
BTree bt;
bt=creatree();
disptree(bt);
findson(bt);
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
异想记歌词,杨幂唱滴! 有什么好打理的烫发发型可以推荐? 有哪些韩系卷发造型比较好打理? 哪些短发卷发造型比较好打理? 什么样的卷发发型比较好打理? 好打理的卷发造型有哪些值得推荐? 有哪些卷发发型比较好打理? 有哪些卷发造型比较好打理? 为什么离线迅雷看看播放器就不能用了,毕竟里面的是已经下载好了的,知... 迅雷离线用不了,连云播的搜索都用不了,是被封了吗? 家族树详细资料大全 ...鲁豫有约锵锵三人行还有哪些王牌栏目?中央电视台呢,像面对面这种... 喝牛奶,拉肚子,怎么办,吃什么药 ...上吐下泻属于什么类型的拉肚子,还有应该吃什么药,应该忌口什么?_百度... 一喝牛奶就拉肚子,高中时放弃喝牛奶。最近突然想着会不会好些,毕竟牛奶... 想知道麦饭石滤料价格和产地信息吗? 蒙阴县天宝源麦饭石厂的介绍 中兴2400可以当维修电源使用吗 中兴2400电位器的作用 如何尽快学会闽南话呢? 在职研究生教育硕士发展的前景解析 三星N9006 GALAXY Note3怎么样 三星note3 n9006怎么样 三星note3电池能用多久?有N9006和N9008大容量电池吗? 你好,我的手机是三星Note3,玩微信游戏好卡,怎么解决? 三星note3上微信时卡住然后黑屏,开不了机,需抠下电池在安上才能开机 note3 9006微信视频聊天一打开就会卡住,qq视频聊天打开后画面会卡住... 三星note3N9006只开微信和qq一晚上消耗了50%的电,该怎么解救啊... 哈尔滨工程大学可以考成都定向选调生吗 ...2014年四川选调生,但听说要求很高,不知道能不能报? 一个是对待女同学女生特别温柔但对男生特别不咋地的男生,一个是男女都... 我脾气挺火爆的,经常吼人,可是女同学都说我很温柔,怎么回事? 描写温柔善良女同学的语句 怎么描写国旗升起时的场景? 北碚区西山环线怎么走 天府镇的介绍 北培焦家沟到天府镇多远 张卫健张茜演情侣夫妻的作品有哪些 张卫健和张茜共同拍了哪几部影片 张卫健和张茜有没有一起拍过戏 是哪一部 日照开放的旅游海滩 阴阳师悬赏封印莹草在哪打 2号主线能钓多大的鱼 2号主线能钓3到5公斤左右的鱼 帮我配一台电脑吧,处理器i3 6300,主板要华硕,我不知道匹配哪款。显卡... i3-6300. 技嘉H110M. GT730r2. 金士顿8GD2. 金士顿120+1T硬盘内_百度... i36300配什么显卡 i3 6300如果带gtx960或1050会不会很吃力呀?能带的动吗?平常玩玩dota2... i3 6300 i3 6320和i5 4590cup不知买那款好了 纠结了 一个是ddr4后者ddr... 天才维修师cp是谁 格力空调可以用手机控制么?