题解 | 树查找,用递归实现,比较好理解

树查找

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;
}

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务