我有一个函数删除所有以avl二叉树中相同的第一个字母开头的单词(字母由用户给出)。
node_t* delete_from_tree(node_t* root, char search, int *deleted)
{
int cmp;
node_t* new_node = NULL;
if (root == NULL)
return root;
else
{
cmp = root->data[0] - search;
if (cmp == 0)
{
*deleted += 1;
new_node = delete_node(root, root->data);
return delete_from_tree(root, search, deleted);
}
else if (cmp > 0)
{
new_node = delete_from_tree(root->left, search, deleted);
}
else
{
new_node = delete_from_tree(root->right, search, deleted);
}
}
return root;
}
它删除了树中的单词但我无法理解为什么在调用树遍历时会打印不必要的字符。
void print_inorder(node_t* node)
{
if (node == NULL)
return;
print_in(node->left);
printf("%s ", node->data);
print_in(node->right);
}
示例:树中的单词:生命,价值,管理,优势,添加,儿子。
预期产量: 生活,儿子,价值。
实际输出: {t life,son,value。
答案 0 :(得分:1)
注意:这不是一个明确的答案,但对于评论空间来说太长了。
您没有显示new_node = delete_node(root, root->data);
对树结构的影响,但很可能会删除root
变量指向的节点。
如果是这样,root
指针在从delete_node()
返回时变为无效,因此return
语句中的递归调用
return delete_from_tree(root, search, deleted);
使被调用函数对非NULL
进行操作,无论如何无效 root
指针。