2014-09-21 225 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; 
    } 
}