c - AVL树示例解释

标签 c avl-tree

我正在阅读 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/

相关文章:

C ascii 字符表

c - 在 C 中的新 #define 中使用先前定义的 #define

c - openssl 解密有时有效

C++ AVL树重新计算高度

java - AVL 树中序遍历不起作用

将十六进制字符串转换为数据

c++ - CMake:将 ELF 嵌入到可执行文件中

java - 创建新节点会不断更改所有节点(Java)

ruby - 什么是 Java 的 TreeSet<Integer>(自平衡二叉树)的 Ruby 等价物?

c++ - AVL 树永远不会有不均衡的平衡 C++