我正在阅读 AVL 树上的一些示例源代码,部分实现是以下函数:
AvlTree MakeEmpty( AvlTree T )
{
if( T != NULL )
{
MakeEmpty( T->Left );
MakeEmpty( T->Right );
free( T );
}
return NULL;
}
在main函数中,使用如下:
int main()
{
AvlTree T;
T = MakeEmpty( NULL );
然后主函数将继续将数字插入到 AVL 树中。我的主要问题是
a) MakeEmpty 函数的用途是什么?我知道它是一个递归函数,但我不明白它的用途。
b) 为什么向此函数传递 NULL 值?
非常感谢!
此外,AVLTree 是指向该结构的指针:
struct AvlNode
{
ElementType Element;
AvlTree Left;
AvlTree Right;
int Height;
};
最佳答案
这是我对代码的理解:
“MakeEmpty 函数的用途是什么?我知道它是一个递归函数,但我不明白它的用途。”
在 int main() 内部,基本上您正在创建一个 AvlTree 对象。 MakeEmpty 传递 Null 的原因是因为您想要一个空树节点,且左右子节点未定义。
b.为什么它被传递为空? Null 终止递归,因为其想法是仅创建空树,其中未定义的子节点传入 Null 将创建“空对象”。
据我所知,本质上这整段代码正在创建一个空的 AvlTree。 HTH。谢谢。关于c - AVL树示例解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15710211/