给定一个二叉树,每个节点有一个值,这些值互不相同,问值x和值y是不是兄弟结点

论坛 期权论坛 期权     
猴04598练有   2018-4-26 14:07   1994   1
分享到 :
0 人收藏

1 个回复

倒序浏览
2#
油条大巴  3级会员 | 2018-4-30 01:48:24 发帖IP地址来自
创建二叉树,请输入整数序列:聽1聽2聽4聽0聽0聽5聽0聽0聽3聽6聽8聽0聽0聽0聽7聽0聽0

请输入x聽y聽(x等于0表示退出):聽4聽5
值x和值y是兄弟结点.

请输入x聽y聽(x等于0表示退出):聽4聽6
值x和值y不是兄弟结点.


扩展二叉树示意图(0表示空结点):

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽1
聽聽聽聽聽聽聽聽/聽聽聽聽聽聽聽聽聽聽聽聽\
聽聽聽聽聽聽聽2聽聽聽聽聽聽聽聽聽聽聽聽聽聽3
聽聽聽聽聽/聽聽聽聽\聽聽聽聽聽聽聽聽聽/聽聽聽聽\
聽聽聽聽4聽聽聽聽聽聽5聽聽聽聽聽聽聽6聽聽聽聽聽聽7聽
聽聽聽/聽\聽聽聽聽/聽\聽聽聽聽聽/聽\聽聽聽聽/聽\聽
聽聽0聽聽聽0聽聽0聽聽聽0聽聽聽8聽聽聽0聽聽0聽聽聽0
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽/聽\
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽0聽聽聽0


#include
#include
typedef聽struct聽Node
{
聽聽聽聽int聽data;
聽聽聽聽struct聽Node聽*left;
聽聽聽聽struct聽Node聽*right;
}Bitree;
//用聽先序扩展序列+递归聽创建二叉树
void聽CreateBiTree(Bitree聽**bt)
{
聽聽聽聽int聽data;
聽聽聽聽scanf("%d",&data);聽//输入数据
聽聽聽聽if(data聽==聽0)聽聽聽聽聽聽//空节点
聽聽聽聽{
聽聽聽聽聽聽聽*bt=NULL;
聽聽聽聽}
聽聽聽聽else
聽聽聽聽{
聽聽聽聽聽聽聽聽*bt=(Bitree聽*)malloc(sizeof(Bitree));
聽聽聽聽聽聽聽聽(*bt)->data=data;
聽聽聽聽聽聽聽聽CreateBiTree(&((*bt)->left));
聽聽聽聽聽聽聽聽CreateBiTree(&((*bt)->right));
聽聽聽聽}
}
//检查值x和值y是不是兄弟结点(递归法)
int聽checkData(Bitree聽*bt,int聽x,int聽y)
{
聽聽聽聽if(bt聽==聽NULL)
聽聽聽聽{
聽聽聽聽聽聽聽聽return聽0;
聽聽聽聽}
聽聽聽聽if(bt->left!=NULL聽&&聽bt->left->data==x聽&&
聽聽聽聽聽聽聽bt->right!=NULL聽&&聽bt->right->data==y)
聽聽聽聽{
聽聽聽聽聽聽聽聽return聽1;
聽聽聽聽}
聽聽聽聽else聽if(bt->left!=NULL聽&&聽bt->left->data==y聽&&
聽聽聽聽聽聽聽bt->right!=NULL聽&&聽bt->right->data==x)
聽聽聽聽{
聽聽聽聽聽聽聽聽return聽1;
聽聽聽聽}
聽聽聽聽else
聽聽聽聽{
聽聽聽聽聽聽聽聽return聽checkData(bt->left,x,y)聽+聽checkData(bt->right,x,y);
聽聽聽聽}
}

int聽main()
{
聽聽聽聽Bitree聽*root;
聽聽聽聽int聽x,y;
聽聽聽聽int聽ret;

聽聽聽聽//创建二叉树,输入先序扩展序列
聽聽聽聽printf("创建二叉树,请输入整数序列:聽");
聽聽聽聽CreateBiTree(&root);

聽聽聽聽while(1)
聽聽聽聽{
聽聽聽聽聽聽聽聽printf("请输入x聽y聽(x等于0表示退出):聽");
聽聽聽聽聽聽聽聽scanf("%d%d",&x,&y);
聽聽聽聽聽聽聽聽if(x==0)
聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽break;
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽ret=checkData(root,x,y);
聽聽聽聽聽聽聽聽if(ret==1)
聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽printf("值x和值y是兄弟结点.\n");
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽else
聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽printf("值x和值y不是兄弟结点.\n");
聽聽聽聽聽聽聽聽}
聽聽聽聽}

聽聽聽聽printf("\n");
聽聽聽聽return聽0;
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP