[英]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.