📄 erchahpd.cpp
字号:
#include<stdlib.h>
#include<stdio.h>
#define N 8
int builttree(int R[],int L[]);
int test(int U,int V,int L[],int R[],int T[]);
int Generation (int U,int V,int L[],int R[],int T[]);
void main()
{
int U=0,V=0,L[N+1],R[N+1],T[N+1];
builttree(R,L);
test(U,V,L,R,T);
}
int builttree(int R[],int L[])
{
int i;
printf("input L[i]:\n");
for(i=0;i<=N;i++)
{
scanf("%d",&L[i]);
}
printf("input R[i]:\n");
for(i=0;i<=N;i++)
{
scanf("%d",&R[i]);
}
return 1;
}
int test(int U,int V,int L[],int R[],int T[])
{
printf("input U V :");
scanf("%d%d",&U,&V);
Generation ( U,V,L,R,T);
return 0;
}
int Generation (int U,int V,int L[],int R[],int T[])
{
int i;
for(i=1;i<=N;i++)
T[i]=0; //T数组初始化
for (i=1;i<=N;i++) //根据L和R填写T
if(L[i]!=0)
T[L[i]]=i; //若结点i的左子女是L,则结点L的双亲是结点i
for(i=1;i<=N;i++)
if (R[i]!=0)
T[R[i]]=i; //i的右子女是r,则r的双亲是i
int parent=U; //判断U是否是V的后代
while (parent!=V && parent!=0)
parent=T[parent];
if (parent==V)
{
printf("结点U是结点V的后代\n");
return(1);
}
else
{
printf("结点U不是结点V 的后代\n");
return (0);
}
}//结束Generation
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -