c - 从 BST 返回当前节点

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

函数调用:

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

最佳答案

首先,您需要沿着每条路径返回一些东西。您是否考虑过以下问题:

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) 递归并返回递归调用返回的任何内容。

关于c - 从 BST 返回当前节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16073608/

相关文章:

java - 为什么我无法将 int 类型值添加到数组中

javascript - 遍历 HTML 结构搜索属性

binary-tree - 通过修改 morris 遍历实现 PreOrder 和 PostOrder 遍历

c - 读写 mmap 的参数无效?

c - C 中的指针给出负值

c - 为什么低级 C 代码如此频繁地使用 goto?

algorithm - 遍历二叉树的最小代价是多少

c - 如何在不查看 GCC 中预处理代码的情况下知道包含哪些 header ?

algorithm - 二叉搜索树是如何创建的?

C-当我在解释器/编译器中需要它时,在结构中的另一种类型上使用指针