1 /*************************************************************************
2 > File Name: 17_MirrorOfBinaryTree.cpp
3 > Author: Juntaran
4 > Mail: JuntaranMail@gmail.com
5 > Created Time: 2016年08月30日 星期二 17时10分03秒
6 ************************************************************************/
7
8 #include <stdio.h>
9 #include <stdlib.h>
10 #include <malloc.h>
11 #include <bits/stdc++.h>
12
13 using namespace std;
14
15 // 二叉树结构体
16 struct TreeNode
17 {
18 int val;
19 TreeNode* left;
20 TreeNode* right;
21 };
22
23 TreeNode* createTree()
24 {
25 TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
26 root->val = 8;
27 root->left = (TreeNode*)malloc(sizeof(TreeNode));
28 root->left->val = 8;
29 root->right = (TreeNode*)malloc(sizeof(TreeNode));
30 root->right->val = 7;
31 root->right->left = NULL;
32 root->right->right = NULL;
33 root->left->left = (TreeNode*)malloc(sizeof(TreeNode));
34 root->left->left->val = 9;
35 root->left->left->left = NULL;
36 root->left->left->right = NULL;
37 root->left->right = (TreeNode*)malloc(sizeof(TreeNode));
38 root->left->right->val = 2;
39 root->left->right->left = (TreeNode*)malloc(sizeof(TreeNode));
40 root->left->right->left->val = 4;
41 root->left->right->left->left = NULL;
42 root->left->right->left->right = NULL;
43 root->left->right->right = (TreeNode*)malloc(sizeof(TreeNode));
44 root->left->right->right->val = 7;
45 root->left->right->right->left = NULL;
46 root->left->right->right->right = NULL;
47
48 return root;
49 }
50
51 void Mirror(TreeNode* root)
52 {
53 if (root == NULL)
54 return;
55 if (root->left==NULL && root->right==NULL)
56 return;
57
58 TreeNode* temp = root->left;
59 root->left = root->right;
60 root->right = temp;
61
62 if (root->left)
63 Mirror(root->left);
64 if (root->right)
65 Mirror(root->right);
66 }
67
68 // 层序遍历二叉树
69 void PrintTreeByLevel(TreeNode* root)
70 {
71 if (root == NULL)
72 return;
73
74 vector<TreeNode*> vec;
75 vec.push_back(root);
76 int cur = 0;
77 int last = 1;
78
79 while (cur < vec.size())
80 {
81 last = vec.size();
82 while (cur < last)
83 {
84 printf("%d ", vec[cur]->val);
85 if (vec[cur]->left != NULL)
86 vec.push_back(vec[cur]->left);
87 if (vec[cur]->right != NULL)
88 vec.push_back(vec[cur]->right);
89
90 ++ cur;
91 }
92 printf("\n");
93 }
94 }
95
96 int main()
97 {
98 TreeNode* tree = createTree();
99
100 PrintTreeByLevel(tree);
101 printf("\n");
102
103 Mirror(tree);
104 PrintTreeByLevel(tree);
105
106 return 0;
107 }