2014-09-21 221 views
-6

讓我們假設一個二叉樹如何扭轉二叉樹

  a 
     / \ 
     b  c 
    /\ /\ 
    d e f g 
/\/\/\/\ 
    h i j k l m n o 

如何扭轉這種局面,即

  a 
     / \ 
     c  b 
    /\ /\ 
    f g d e 
/\/\/\/\ 
    l m n o h i j k 

我如何保持這是會二叉樹的價值軌道被顛倒。因爲當我通過一棵樹旅行我會在左半如何與左半

+3

沒有顯示嘗試將其交換。 – 2014-09-21 13:39:32

+0

恢復對人類的信仰!!!!!! – 2014-09-21 14:22:31

回答

2
void reverseLevelOrder(struct node* root) 
{ 
    int h = height(root); 
    int i; 
    for (i=h; i>=1; i--) //THE ONLY LINE DIFFERENT FROM NORMAL LEVEL ORDER 
     printGivenLevel(root, i); 
} 

/* Print nodes at a given level */ 
void printGivenLevel(struct node* root, int level) 
{ 
    if (root == NULL) 
     return; 
    if (level == 1) 
     printf("%d ", root->data); 
    else if (level > 1) 
    { 
     printGivenLevel(root->left, level-1); 
     printGivenLevel(root->right, level-1); 
    } 

}

0
void mirror(struct node* node) 
{ 
    if (node==NULL) 
    return; 
    else 
    { 
    struct node* temp; 

    /* do the subtrees */ 
    mirror(node->left); 
    mirror(node->right); 

    /* swap the pointers in this node */ 
    temp  = node->left; 
    node->left = node->right; 
    node->right = temp; 
    } 
}