2015-04-22 87 views
0
AvlTree 
Insert(ElementType X, AvlTree T) 
{ 
    1 if(T == NULL) 
    2 { 
    3  /* Create and return a one-onde tree */ 
    4  T = malloc(sizeof(struct AvlNode)); 
    5  if(T == NULL) 
    6   FatalError("Out of space!!!"); 
    7  else 
    8  { 
    9   T->Element = X; T->Height = 0; 
10   T->Left = T->Right = NULL; 
11  } 
12 } 
13 else 
14 if(X < T->Element) 
15 { 
16  T->left = Insert(x, T->left); 
17  if(Height(T->left) - Height(T->Right) == 2) 
18   if(X < T->Left->Element) 
19    T = SingleRotatewithLeft(T); 
20   else 
21    T = DoubleRotateWithLeft(T); 
22 } 
23 else 
24 if(X > T->Element) 
25 { 
26  T->Right = Insert(X, T->Right); 
27  if(Height(T->Right) - Height(T->Left) == 2) 
28   if(X > T->Right->Element) 
29    T = SingleRotateWithRight(T); 
30   else 
31    T = DoubleRotateWithRight(T); 
32 } 
33 /* Else X is in the tree already; we'll do nothing */ 
34 T->Height = Max(Height(T->Left), Height(T->Right)) + 1; 
35 return T; 
} 

爲什麼X不等於T->left->Element, 怎麼能X與T->left->Element 的X比較應該分配給T->left-Element(當T->left = NULLAVL樹插入功能

+1

發佈代碼時,請不要包含行號。而是用註釋標記特定的行。 –

+0

請確定您詢問的代碼的哪一部分。 –

+0

@Scott Hunter就像第18行一樣,X不等於'T-> left-> Element'? – nojihrb

回答

0

線18後,X已被插入T->Left,但它可能不(必然)在該樹的頂部。