[英]AVL tree sample explanation
我正在阅读AVL树上的一些示例源代码,部分实现是以下功能:
AvlTree MakeEmpty( AvlTree T )
{
if( T != NULL )
{
MakeEmpty( T->Left );
MakeEmpty( T->Right );
free( T );
}
return NULL;
}
在主要功能中,其用法如下:
int main()
{
AvlTree T;
T = MakeEmpty( NULL );
然后,主要功能移至AVL树中的插入编号。 我的主要问题是
a)MakeEmpty函数的目的是什么? 我知道它是递归函数,但我不了解它的目的。
b)为什么将NULL值传递给此函数?
非常感谢!
同样,AVLTree是指向此结构的指针:
struct AvlNode
{
ElementType Element;
AvlTree Left;
AvlTree Right;
int Height;
};
这看起来像是dtor
的c样式ctor
和AvlNode
。
在C ++中,您可以执行以下操作
struct AvlNode
{
ElementType Element;
AvlTree Left;
AvlTree Right;
int Height;
AvlNode()
: Left(NULL), Right(NULL), Height(0)
{}
~AvlNode()
{
// free node
}
};
但是您不能在C中执行此操作。因此,基本上, MakeEmpty
仅用于确保两个指针都不指向随机地址,而是指向NULL
。
a)MakeEmpty函数的目的是什么? 我知道它是递归函数,但我不了解它的目的。
makeEmpty()
函数为所有节点释放空闲内存,正如其名称所暗示的那样,它makeEmpty()
旅行。 请注意,在后顺序遍历器中,一旦处理了一个节点,就不会再对其进行引用,因此对free()的所有节点而言,后顺序是正确的,因为释放的节点不应再次被引用。
b)为什么将NULL值传递给此函数?
它只是将 T 初始化为NULL的对称方式。 通知MakeEmpty( NULL );
返回null,因为发送了null。
T = MakeEmpty( NULL );
== T = NULL
编辑
MakeEmpty()如何工作? (阅读评论)
AvlTree MakeEmpty( AvlTree T )
{
if( T != NULL )
{
MakeEmpty( T->Left ); // but in stack
MakeEmpty( T->Right ); // but in stack
free( T ); // free node
}
return NULL; // if T is passed NULL then it returns NULL
}
对于(B)答案T = MakeEmpty( NULL );
返回NULL。
这是我对代码的理解:
“ MakeEmpty函数的目的是什么?我知道它是递归函数,但我不了解它的目的。”
在int main()内部,基本上是在创建AvlTree对象。 将MakeEmpty传递为Null的原因是因为您需要一个空的树节点,左右子节点为未定义。
湾 为什么将其传递为null? Null终止递归,并且由于想法是只创建带有未定义子节点的空树,因此传入Null会创建“空对象”。
基本上,据我所知,整段代码都在创建一个空的AvlTree。 HTH。 谢谢。
a)它正在清空树-即释放所有节点
b)因为它是一个递归函数,所以它在到达叶子时将传递null,尽管它可以在下一个递归调用之前轻松地检查null
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.