劍指offer之二叉樹的鏡像

1題目

求二叉樹A的鏡像,就是對稱圖,比如下面的樹B是樹A的鏡像
比如:
              2                           2
   樹A  3    5      樹B        5     3
        1  4  2  3              3   2  4  1

 
2 代碼實(shí)現(xiàn)

    #include <stdio.h>
     
    #define true 1
    #define false 0
     
    typedef struct Node
    {
        int value;
        struct Node* left;
        struct Node* right;
    } Node;
     
    void reverse_tree(Node *head)
    {
       if (head != NULL)
       {
           Node *temp = head->left;
           head->left = head->right;
           head->right = temp;
           reverse_tree(head->left);
           reverse_tree(head->right);
       }
    }
    void reverse_tree1(Node *head)
    {
       if (head == NULL)
       {
          return;
       }
       if (head->left == NULL && head->right == NULL)
       {
          return;
       }
       Node *temp = head->left;
       head->left = head->right;
       head->right = temp;
       //if (head->left != NULL)
            reverse_tree(head->left);
       //if (head->right != NULL)
            reverse_tree(head->right);
    }
     
    void printf_tree(Node *head)
    {
        if (head != NULL)
        {
            printf("val is: %d\n", head->value);
            printf_tree(head->left);
            printf_tree(head->right);
        }
    }
    
    int main()
    {
        /*              2
         *           3    5            5
         *         1  4  2  3        2   3
         *       
         */
        Node head1, node1, node2, node3, node4, node5, node6;
        Node head2, node7, node8;
        head1.value = 2;
        node1.value = 3;
        node2.value = 5;
        node3.value = 1;
        node4.value = 4;
        node5.value = 2;
        node6.value = 3;
        
        head1.left = &node1;
        head1.right = &node2;
     
        node1.left = &node3;
        node1.right = &node4;
     
        node2.left = &node5;
        node2.right = &node6;
     
        node3.left = NULL;
        node3.right = NULL;
        node4.left = NULL;
        node4.right = NULL;
        node5.left = NULL;
        node5.right = NULL;
        node6.left = NULL;
        node6.right = NULL;
     
        head2.value = 5;
        node7.value = 2;
        node8.value = 3;
     
        head2.left = &node7;
        head2.right = &node8;
        node7.left = NULL;
        node7.right = NULL;
        node8.left = NULL;
        node8.right = NULL;
        
        printf_tree(&head1);
        printf("----\n");
        reverse_tree(&head1);
        printf_tree(&head1);
    }

 
3 運(yùn)行結(jié)果

    val is: 2
    val is: 3
    val is: 1
    val is: 4
    val is: 5
    val is: 2
    val is: 3
    ----
    val is: 2
    val is: 5
    val is: 3
    val is: 2
    val is: 3
    val is: 4
    val is: 1


 


作者:chen.yu
深信服三年半工作經(jīng)驗(yàn),目前就職游戲廠商,希望能和大家交流和學(xué)習(xí),
微信公眾號:編程入門到禿頭 或掃描下面二維碼
零基礎(chǔ)入門進(jìn)階人工智能(鏈接)