我想定义一个函数,使二叉查找树为空,返回类型为void。
下面是我的代码:_Node structure
typedef struct _Node {
int data;
struct _Node* l_child;
struct _Node* r_child;
} Node;
BST_To_Empty
void BST_To_Empty(Node* root)
{
if(root)
{
BST_To_Empty(root->l_child);
BST_To_Empty(root->r_child);
free(root);
}
printf("[BST_To_Empty] Now BST is NULL");
}
CheckEmpty
void isEmpty(Node* root)
{
if (root == NULL)
{
printf("NULL");
}
else
{
printf("Not NULL");
}
}
用这些代码我做了如下的主要功能:
int main()
{
Node* root = NULL;
// Some Initialization
BST_To_Empty(root);
CheckEmpty(root);
}
所以我想我可以得到一个结果“[BST_To_Empty] Now BST is NULL”和“NULL”
但是我得到了“[BST_To_Empty] Now BST is NULL”和“Not NULL”
我有一点困惑,为什么“CheckEmpty”的结果是“Not NULL”,尽管我让root自由?
我应该修改什么才能得到“CheckEmpty”的结果是“NULL”?
谢谢你的帮助
1条答案
按热度按时间jgovgodb1#
函数
BST_To_Empty
声明如下处理main中声明的指针
root
的值的副本在函数内更改原始指针的值的副本会使原始指针保持不变。此外,函数
free
也通过值接受指针,并且不将原始指针设置为NULL
。需要通过引用将原始指针
root
传递给函数。在C中,通过引用传递对象意味着通过指向它的指针间接传递它。
这就是函数的样子
被称为
反过来,函数
isEmpty
应该像这样声明和定义并且函数不应显示任何消息。函数的调用者将决定是否输出消息,例如