我尝试编写遍历树的函数,直到找到包含给定值的节点(在本例中为符号)。我试过这样的事情:
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"的节点。
但是,我似乎无法使用上述功能,任何想法?
注意:我知道如果具有该给定符号的节点不存在,上述功能没有响应,但是现在我只是使用我知道的符号来调用它包含在树中。
答案 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;
}