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 に答える