#include <stdio.h >
#include <string.h>
struct BinaryNode
{
char data[10];
BinaryNode *lchild,*rchild,*parent;
};
BinaryNode* create()
{
BinaryNode *root; //创建根结点
root=new BinaryNode;
printf("输入根结点的数据(以'#'为空):");
char str[10];
gets(str);
strcpy(root->data,str);
root->lchild=NULL;//初始化根结点的左孩子指针
root->rchild=NULL;//初始化根结点的右孩子指针
root->parent=NULL;
if(root->data!="#")
{
//创建根结点的左子树
printf("请输root->data 的左孩子:");
root->lchild=create();
//创建根结点的右子树
printf("请输入root->data的右孩子:");
root->rchild=create();
}
return root; //返回根结点的地址
}
void preorder(BinaryNode *root) //先序遍历函数
{
if (root==NULL) return; //如果是空树,则返回
else
{
printf("%s,root->data"); //访问根结点
}
preorder(root->lchild); //先先序遍历左子树
preorder(root->rchild); //最后先序遍历右子树
}
BinaryNode *FindNode(BinaryNode * bt,char la[]) //采用先序递归算法找name为la的结点
{
BinaryNode *p=bt;
if(p==NULL)
return(NULL);
else
{
if(strcmp(p->data,la)==0)
return(p);
else
{
bt=FindNode(p->lchild,la);
if(bt!=NULL)
return(bt);
else
return(FindNode(p->rchild,la));
}
}
void FindSon(BinaryNode * bt) //输出某人所有儿子
{
char la[10];
BinaryNode *p;
printf("输入父亲姓名:");
gets(la);
p=FindNode(bt,la);
if(p==NULL)
printf("不存在此父亲");
else
{
p=p->lchild;
if(p==NULL)
printf("无左孩子");
else
{
p=p->rchild;
if(p==NULL)
printf("无右孩子:");
else
{
printf("左孩子为:");
while(p!=NULL)
{
printf(&s,p->data);
p=p->parent->rchild;
printf(%s,p->data);
}
printf"\n";
}
int Path(BinaryNode *bt,BinaryNode *s)
{
BinaryNode *St[30];
BinaryNode *p;
int i,flag,top=-1; //栈指针置初值
do
{
while(bt)
{
top++;
St[top]=bt;
bt=bt->lchild;
}
p=NULL;
flag=1;
while(top!=-1&&flag)
{
bt=St[top];
if(bt->rchild==p)
{
if(bt==s)
{
printf("所有祖先:");
for(i=0;i <top;i++)
puts(St[i]->data);
return 1;
}
else
{
top--;
p=bt;
}
}
else
{
bt=bt->rchild;
flag=0;
}
}
}while(top!=-1);
return 0;
}
void Ancestor(BinaryNode * bt)
{
BinaryNode *p;
char la[10];
printf("输入姓名");
gets(la);
p=FindNode(bt,la);
if(p!=NULL)
Path(bt,p);
else
printf("不存在");
}
void main()
{
BinaryNode *rt;
int d;
printf("1记录输入;2记录输出;3清除全部文件记录;4.查找某人所有的儿子;5.查找某人的所有祖先;6返回.");
scanf(%d,&d);
switch(d)
{
case 1:
rt=create();
break;
case 2:
printf("其中先序遍历序列:");
preorder(rt);
break;
case 3:
TreeDestory(rt);
prinrf("清除完成;") ;
break;
case 4:FindSon(rt);break;
case 5:Ancestor(rt);break;
case 6:break;
}
}
jiapu.rar_jiapu_家谱_家谱 二叉树_家谱二叉树_家谱程序设计
版权申诉
5星 · 超过95%的资源 90 浏览量
2022-09-24
15:07:39
上传
评论
收藏 79KB RAR 举报
邓凌佳
- 粉丝: 65
- 资源: 1万+
最新资源
- Q1.py
- 企业政府灵智电子政务网站系统-lingzhi.rar
- Thinkphp内核开发Lsky Pro兰空图床网站源码.rar
- 基于FPGA(XC6SLX9)+SDRAM+AD7829多通道数据采集板硬件(原理图+PCB)工程文件.zip
- 阿里巴巴精准测试体系:基于代码链路分析的性能优化方案
- mmexport1714217773503.jpg
- 【图片网盘外链系统5.0】全新前端UI界面设计 支持图片违规检测网站自适应H5源码.rar
- jsp+sql的BBS论坛系统.zip
- 网盘外链PHP开发彩虹网盘外链程序源码.rar
- 2023年最新文件快递柜系统网站源码 保护用户隐私的匿名口令分享和临时文件分享功能.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈