题解 | 树查找,用递归实现,比较好理解
树查找
https://www.nowcoder.com/practice/9a10d5e7d99c45e2a462644d46c428e4
#include <stdio.h>
static int flag=0;
void selectknode(int ar[],int n,int k,int m)
{//n为数组元素个数,k为找到第k层的条件,m为根节点
if(m>=n)//说明该节点不存在,返回
return;
if(k==1)//找到第k层的节点
{
if(flag==0)//用flag的原因是为了控制输出时的空格
{
flag=1;//表示有深度为k的节点,并控制输出格式中的空格
printf("%d",ar[m]);
}
else
printf(" %d",ar[m]);
return;//返回
}
selectknode(ar,n,k-1,2*m+1);//查找左子树
selectknode(ar,n,k-1,2*m+2);//查找右子树
}
int main() {
int n;
scanf("%d",&n);
int ar[n];
for(int i=0;i<n;++i)
scanf("%d",&ar[i]);
int d;
scanf("%d",&d);
selectknode(ar,n,d,0);//用递归实现
if(flag==0)//表示没有深度为k的节点
printf("EMPTY");
printf("\n");
return 0;
}
查看22道真题和解析