从BST返回当前节点



你好,我遇到了一个问题,我似乎无法解决。我有一个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);
Func:

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 foundn");
    }
}

首先,您需要沿着每条路径return一些东西。你有没有考虑过这样的事情:

link check_rank(link h, int target) {
  if (h == NULL) {
    printf("equivalent rank could not be foundn");
    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)递归并返回递归调用返回的任何值

最新更新