我正在尝试创建一个树数据结构来存储有关奥运场馆的信息。我刚刚遇到了障碍,我意识到我的删除函数总是返回“Element Not Found”,并且我的 DFS 将找到正确的节点,但然后继续打印出树的右侧。
Tree * preorder_find(char * find_city, Tree* T)
{
if(T)
{
//if(strcmp(T->Element->city, find_city) == 0)
//return T;
printf("%s, %s ... %d\n", T->Element->city, T->Element->country,
T->Element->year);
if(strcmp(T->Element->city, find_city) != 0)
{
preorder_find(find_city, T->Left);
preorder_find(find_city, T->Right);
}
}
return T;
}
Tree* delete(char * venue, Tree* T)
{
Tree* tmp_node;
if(T==NULL)
fprintf(stderr, "Element not Found\n");
else
if(strcmp(venue, T->Element->city) < 0)
T->Left = delete(venue, T->Left);
else
if(strcmp(venue, T->Element->city) > 0)
T->Right = delete(venue, T->Left);
else
if(T->Left && T->Right)
{
tmp_node = find_min(T->Right);
T->Element = tmp_node->Element;
T->Right = delete(T->Element->city, T->Right);
}
else
{
tmp_node = T;
if(T->Left == NULL)
T = T->Right;
else if(T->Right == NULL)
T = T->Left;
free(tmp_node);
}
return T;
}
最佳答案
请尝试这个
preorder_find()
Tree * preorder_find(char * find_city, Tree* T) { 树*温度;
if(T) { if(strcmp(T->Element->city, find_city) == 0) return T; printf("%s, %s ... %d\n", T->Element->city, T->Element->country, T->Element->year); if(strcmp(T->Element->city, find_city) != 0) { if ((temp = preorder_find(find_city, T->Left)) || (temp = preorder_find(find_city, T->Right))) return temp; } } return T;
}
-
my delete function always returns "Element Not Found"
根据您的
delete()
,这意味着delete()
的参数T
始终为NULL
.
关于c - 删除和 DFS 功能无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22060093/