簡體   English   中英

AVL樹樣本說明

[英]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樣式ctorAvlNode

在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM