搜索二叉树中特定节点的函数?

时间:2015-12-02 03:30:36

标签: c binary-tree

我尝试编写遍历树的函数,直到找到包含给定值的节点(在本例中为符号)。我试过这样的事情:

struct HuffTreeNode* findNode (struct HuffTreeNode* root, unsigned char symbol)
{
  if (root != NULL)
  {
    if (root->symbol == symbol)
    {
      return root;
    }
    else
    {
    findNode(root->left,symbol);
    findNode(root->right,symbol);
    }
  }
  return root;
}

因此,如果我调用findNode(root,'c'),它将返回包含" c"的节点。 但是,我似乎无法使用上述功能,任何想法?

注意:我知道如果具有该给定符号的节点不存在,上述功能没有响应,但是现在我只是使用我知道的符号来调用它包含在树中。

1 个答案:

答案 0 :(得分:2)

  

注意:我知道如果不存在具有该给定符号的节点,则上述函数没有响应,

这是第一个问题。您返回root,即使它不是正确的节点。在这种情况下,您应该返回NULL

接下来,你在左右递归调用findNode,但是你没有对它们的返回值做任何事情,所以你的代码永远不会工作。检查返回值。如果它不是NULL,则表示在该子树中找到匹配,因此返回它。

struct HuffTreeNode* findNode (struct HuffTreeNode* root, unsigned char symbol)
{
  if (root != NULL)
  {
    if (root->symbol == symbol)
    {
      return root;
    }
    else
    {
        struct HuffTreeNode *n;

        // Try the left sub-tree
        n = findNode(root->left,symbol);
        if (n)
            return n;

        // Try the right sub-tree
        n = findNode(root->right,symbol);
        if (n)
            return n;
    }
  }

  // Not found
  return NULL;
}