2013-10-26 57 views
0

我想了解AVL樹的下面一段代碼,但我有一些困難。我知道,如果樹被留下,它會做一個正確的旋轉。如果重的很重要,它也會左轉。感謝有人能夠解釋或指導我理解下面的代碼的正確方向。AVL Right Rotate

static void avl_rotate_right(TLDList *tld, TLDNode *node) { 
    if (node->parent != NULL) { 
     if (node->parent->left == node) 
      node->parent->left = node->left; 
     else 
      node->parent->right = node->left; 
    } else 
     tld->root = node->left; 

    node->left->parent = node->parent; 
    node->parent = node->left; 
    node->left = node->left->right; 

    if (node->left != NULL) 
     node->left->parent = node; 
    node->parent->right = node; 
} 

回答

0

基本上這段代碼正在檢查被旋轉的節點是否是根節點。如果是這種情況,那麼根被重新分配爲先前根的子項。如果正在旋轉的節點不是根,並且正在旋轉的節點是左側子節點,則將其替換爲其自己的左側子節點,如果它是右側子節點,則將父節點右側子節點替換爲左側子節點。

然後,將父節點的父節點分配給父節點。然後,父節點被指定爲節點離開的子節點。然後,該節點的左側子節點被分配爲左側子節點的右側子節點。如果離開子節點的節點不爲空,則如果節點離開子節點爲空,則將節點父節點子節點設置爲節點,則將節點離開子節點的父節點分配爲節點。

推薦?

+0

謝謝你花時間解釋。這有助於。我已經接受了你的答案。 –