gpt4 book ai didi

c - 删除二叉搜索树的两种递归算法之间的区别

转载 作者:太空宇宙 更新时间:2023-11-04 08:05:05 24 4
gpt4 key购买 nike

我对这两个算法有疑问:

这正常工作:

node* deleteTree(node* root)
{
if(root != NULL)
{
deleteTree(root->left);
deleteTree(root->right);
deallocateNode(root);
}
return root=NULL;
}

这不:

void deleteTree(node* root)
{
if(root != NULL)
{
deleteTree(root->left);
deleteTree(root->right);
deallocateNode(root);
}
root=NULL;
}

为什么?我需要将 root 设置为 null,这样删除 BST 后的节点指针就不会指向未分配的内存。我更喜欢第二种算法,因为函数的召回更直观。

理论上,这两种算法是等效的,但如果我使用第二种算法并尝试打印 BST,程序将进入循环。

最佳答案

当您拥有 node *root 并分配 node = NULL 时,它不会影响其在外部的值。如果要修改指针值,则必须传递双指针。

类似于:

void deleteTree(node** root)
{
if(*root != NULL)
{
deleteTree(&((*root)->left));
deleteTree(&((*root)->right));
deallocateNode(*root);
}
*root = NULL;
}

但我真的不认为你需要分配 node = NULL 因为你释放了它。因此,您可以在调用 deleteTree 后分配 node = NULL,而无需使用双指针。

关于c - 删除二叉搜索树的两种递归算法之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43410731/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com