Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C AVL树示例说明_C_Avl Tree - Fatal编程技术网

C AVL树示例说明

C AVL树示例说明,c,avl-tree,C,Avl Tree,我正在阅读一些关于AVL树的示例源代码,实现的一部分是以下函数: AvlTree MakeEmpty( AvlTree T ) { if( T != NULL ) { MakeEmpty( T->Left ); MakeEmpty( T->Right ); free( T ); } return NULL; } 在主功能中,它的用途如下: int main() { AvlTree T;

我正在阅读一些关于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) 为什么将空值传递到此函数中

非常感谢

此外,AVLTree是指向此结构的指针:

struct AvlNode
{
    ElementType Element;
    AvlTree  Left;
    AvlTree  Right;
    int      Height;
};

这看起来像是
AvlNode
的c样式的
ctor
dtor

在C++中,你可以做一些类似于

的事情
struct AvlNode
{
    ElementType Element;
    AvlTree  Left;
    AvlTree  Right;
    int      Height;

    AvlNode()
      : Left(NULL), Right(NULL), Height(0)
    {}

    ~AvlNode()
    { 
       // free node
    } 
};

但是你不能在C中这样做。所以基本上,
MakeEmpty
只是为了确保两个指针都不指向随机地址,而是指向
NULL
这看起来像是
AvlNode
的C样式的
ctor
dtor

在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()
函数名称所示,在按后序移动时为所有节点释放内存。注意:在post order traverser中,一旦处理了节点,就不会再次引用它,因此to free()所有节点的post order都是正确的,因为释放的节点不应再次引用

b) 为什么将空值传递到此函数中

这只是一种将T初始化为NULL的对称方式。注意
MakeEmpty(NULL)返回null,因为发送时为null

        T = MakeEmpty( NULL );
==      T = NULL
编辑

MakeEmpty()是如何工作的?(阅读评论)

对于(B)答案
T=MakeEmpty(NULL)返回NULL

a) MakeEmpty函数的用途是什么?我知道这是一个递归函数,但我不明白它的用途

makeEmpty()
函数名称所示,在按后序移动时为所有节点释放内存。注意:在post order traverser中,一旦处理了节点,就不会再次引用它,因此to free()所有节点的post order都是正确的,因为释放的节点不应再次引用

b) 为什么将空值传递到此函数中

这只是一种将T初始化为NULL的对称方式。注意
MakeEmpty(NULL)返回null,因为发送时为null

        T = MakeEmpty( NULL );
==      T = NULL
编辑

MakeEmpty()是如何工作的?(阅读评论)


对于(B)答案
T=MakeEmpty(NULL)返回NULL。

以下是我对代码的理解:

MakeEmpty函数的用途是什么?我知道它是一个递归函数,但我不理解它的用途

在int main()中,基本上是创建一个AvlTree对象。MakeEmpty被传递为Null的原因是,您需要一个空的树节点,其右和左子节点未定义

b。为什么它被传递为空? Null终止递归,因为其思想是只创建空树,而未定义的子节点传入Null将创建“emtpy对象”

就我所知,这整段代码实际上是在创建一个空AvlTree。
嗯。谢谢。

以下是我对代码的理解:

MakeEmpty函数的用途是什么?我知道它是一个递归函数,但我不理解它的用途

在int main()中,基本上是创建一个AvlTree对象。MakeEmpty被传递为Null的原因是,您需要一个空的树节点,其右和左子节点未定义

b。为什么它被传递为空? Null终止递归,因为其思想是只创建空树,而未定义的子节点传入Null将创建“emtpy对象”

就我所知,这整段代码实际上是在创建一个空AvlTree。 嗯。谢谢。

a)它正在清空树,即释放所有节点

b) 因为它是一个递归函数,当它到达一个叶子时,它将传递null,尽管它可以在下一个递归调用之前轻松地检查null


b) 因为它是一个递归函数,当它到达一个叶子时,它将传递null,尽管它可以在下一个递归调用之前轻松地检查null

你能解释一下什么是c风格的构造函数吗?@user1816546它只是为了确保指针指向
null
。你能解释一下c风格的构造函数是什么吗构造函数是?@user1816546它只是为了确保指针指向
NULL
。在将数据加载到AVL树之前调用该函数。如果一开始没有分配内存,它如何释放内存?在数据加载到AVL树之前调用该函数。如果一开始没有分配内存,它如何释放内存?