从BST返回当前节点

时间:2013-04-18 02:39:57

标签: c binary-search-tree tree-traversal

您好我遇到了一些我似乎无法解决的问题。我有一个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;
};

Func call:

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 found\n");
    }
}

1 个答案:

答案 0 :(得分: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)在满足适当条件时返回sentinel以停止递归或(2)递归并返回递归调用返回的任何内容。