0

您好,我遇到了一个似乎无法解决的问题。我有一个 BST,我正在遍历并检查排名。我有一个方法checkRank(link head, targRank) ,它接收头节点并遍历树,直到找到与 targRank 具有相同等级的节点。我想要做的是让 checkRank 函数返回它找到相同等级的当前节点。实现这一目标的最佳方法是什么,因为我所有的尝试似乎都将当前节点作为头部返回?

typedef struct node* link;

struct node 
{
    Item item;  // Data for this node
    link l, r;  // left & right links
    int rank;
};

函数调用:

link head;
checkRank(head, 13);

功能:

link checkRank(link h,int targetRank)
{
    if (h != NULL)
    {
        if (h->rank < targRank)
        {
            checkRank(h->r, targRank);
        }


    if (h->rank > tarRank)
        {
            checkRank(h->l, targtRank);
        }

        if (h->rank == targRank)
        {
            return ??;
        }
    }
    else
    {
        printf("Equiv rank could not be found\n");
    }
}
4

1 回答 1

1

首先,你需要return沿着每条路径做一些事情。您是否考虑过以下问题:

link check_rank(link h, int target) {
  if (h == NULL) {
    printf("equivalent rank could not be found\n");
    return NULL;
  }
  if (h->rank < target)
    return check_rank(h->r, target);
  if (h->rank > target)
    return check_rank(h->l, target);
  return h;
}

函数必须始终返回一个值,并且许多递归函数将遵循以下模式:(1)在满足适当条件时返回哨兵以停止递归,或(2)递归并返回递归调用返回的任何内容。

于 2013-04-18T02:50:06.760 回答