fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. struct TreeNode {
  5. int val;
  6. TreeNode *left;
  7. TreeNode *right;
  8. TreeNode(int x) : val(x), left(NULL), right(NULL) {}
  9. };
  10.  
  11. class Solution
  12. {
  13. private:
  14. public:
  15. Solution();
  16. int mirror_image(struct TreeNode *A, int query);
  17. };
  18. vector<int> cp(struct TreeNode *A)
  19. {
  20. vector<int > vp;
  21. int iter (0);
  22. if(A != NULL)
  23. {
  24. vp.push_back(A->val);
  25. cp(A->left);
  26. cp(A->right);
  27. }
  28.  
  29. return vp;
  30. }
  31. Solution::Solution(){}
  32. int Solution::mirror_image(struct TreeNode *A, int query)
  33. {
  34. vector<int> store = cp(A);
  35. queue<struct TreeNode *> q;
  36. q.push(A);
  37. while(!q.empty())
  38. {
  39. struct TreeNode * node = q.front();
  40. q.pop();
  41. if(node->left == NULL && node->right == NULL)
  42. {
  43. continue;
  44. }
  45. if(node->left != NULL && node->right != NULL)
  46. {
  47. TreeNode *temp = node->left;
  48. node->left = node->right;
  49. node->right = temp;
  50. q.push(node->left);
  51. q.push(node->right);
  52. }
  53. else if(node->left == NULL)
  54. {
  55. node->left = node->right;
  56. node->right = NULL;
  57. q.push(node->left);
  58. }
  59. else
  60. {
  61. node->right = node->left;
  62. node->right = NULL;
  63. q.push(node->left);
  64. }
  65. }
  66. vector<int> mirror = cp(A);
  67. int iter (0);
  68. for(iter = 0; iter < store.size(); iter++)
  69. {
  70. if(store[iter] == query)
  71. {
  72. break;
  73. }
  74. }
  75. if(mirror[iter] > 0)
  76. {
  77. return mirror[iter];
  78. }else
  79. {
  80. return -1;
  81. }
  82.  
  83. }
  84.  
  85. int main()
  86. {
  87. ios_base::sync_with_stdio(false);
  88. cin.tie(NULL);
  89. Solution sol;
  90.  
  91. int queries = 8;
  92. TreeNode *a = new TreeNode(1);
  93. a->left = new TreeNode(3);
  94. a->right = new TreeNode(2);
  95. a->left->left = new TreeNode(7);
  96. a->left->right = new TreeNode(6);
  97. a->right->left = new TreeNode(5);
  98. a->right->right = new TreeNode(4);
  99. a->left->left->right = new TreeNode(10);
  100. a->right->left->left = new TreeNode(9);
  101. a->right->left->right = new TreeNode(8);
  102. for(int iter = 0; iter < queries; iter++)
  103. {
  104. int query;
  105. cin >> query;
  106. int ans = sol.mirror_image(a, query);
  107.  
  108. cout << ans << endl;
  109.  
  110. }
  111.  
  112.  
  113.  
  114. return 0;
  115. }
  116.  
Success #stdin #stdout 0s 15240KB
stdin
2
5
3
6
1
10
9
4
stdout
11037
11037
11037
11037
1
11037
11037
11037