summaryrefslogtreecommitdiff
path: root/top-interview-questions/easy/trees/03_symmetric_tree.cc
diff options
context:
space:
mode:
author3gg <3gg@shellblade.net>2025-02-05 18:36:31 -0800
committer3gg <3gg@shellblade.net>2025-02-05 18:36:31 -0800
commit4689e4e80b479be25f7557d05818f5caa723aafa (patch)
tree4df25811fe2a9a15b401375178da6537f4b6063f /top-interview-questions/easy/trees/03_symmetric_tree.cc
Initial commit.HEADmain
Diffstat (limited to 'top-interview-questions/easy/trees/03_symmetric_tree.cc')
-rw-r--r--top-interview-questions/easy/trees/03_symmetric_tree.cc52
1 files changed, 52 insertions, 0 deletions
diff --git a/top-interview-questions/easy/trees/03_symmetric_tree.cc b/top-interview-questions/easy/trees/03_symmetric_tree.cc
new file mode 100644
index 0000000..bbdc52b
--- /dev/null
+++ b/top-interview-questions/easy/trees/03_symmetric_tree.cc
@@ -0,0 +1,52 @@
1/**
2 * Definition for a binary tree node.
3 * struct TreeNode {
4 * int val;
5 * TreeNode *left;
6 * TreeNode *right;
7 * TreeNode() : val(0), left(nullptr), right(nullptr) {}
8 * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
9 * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
10 * };
11 */
12class Solution {
13public:
14 bool isSymmetricVector(const std::vector<const TreeNode*>& nodes) {
15 if (nodes.empty()) return true;
16 if (nodes.size() == 1) return true;
17 for (size_t i = 0; i < nodes.size()/2; ++i) {
18 const size_t j = nodes.size() - i - 1;
19 if ((nodes[i] && !nodes[j]) ||
20 (!nodes[i] && nodes[j]) ||
21 (nodes[i] && nodes[j] && (nodes[i]->val != nodes[j]->val))) {
22 return false;
23 }
24 }
25 return true;
26 }
27
28 bool isSymmetricBfs(std::vector<const TreeNode*>& current_level,
29 std::vector<const TreeNode*>& next_level) {
30 if (current_level.empty()) {
31 return true;
32 }
33 if (!isSymmetricVector(current_level)) {
34 return false;
35 }
36 for (const TreeNode* node : current_level) {
37 if (node) {
38 next_level.push_back(node->left);
39 next_level.push_back(node->right);
40 }
41 }
42 current_level.clear(); // New next level.
43 return isSymmetricBfs(next_level, current_level);
44 }
45
46 bool isSymmetric(TreeNode* root) {
47 if (!root) return true;
48 std::vector<const TreeNode*> current_level({root});
49 std::vector<const TreeNode*> next_level;
50 return isSymmetricBfs(current_level, next_level);
51 }
52};