반응형
https://leetcode.com/problems/symmetric-tree/
tree 순회로 해결한 문제였습니다.
📕 풀이방법
📔 풀이과정
* 여러 풀이 방식이 예상되는데 여기서 inorder로 순회해 얻은 vector를 출력해보니 대칭형태가 나오는 것을 파악하고 제출했지만 틀렸습니다. 값이 같은데 모양만 다른 경우가 있을 때가 예외였습니다. 이를 depth를 주어 treenode의 value의 고유성을 보장해서 맞게 되었습니다.1. 중위 순회를 하면서 왼쪽 혹은 오른쪽 자식으로 내려가면서 value에 값을 depth만큼 더해줬습니다. 이 값을 vector v를 선언해 담습니다.2. v의 중간부터 양쪽으로 퍼지면서 for loop를 수행해 원소가 같은지를 비교해 모두 같다면 true, 하나라도 다르면 false를 반환합니다.
📕 Code
📔 C++
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
void inOrder(TreeNode* tree, vector <int> &v, int depth){
if(tree == nullptr) { return;}
inOrder(tree->left, v, depth + 100);
v.push_back(tree->val + depth);
inOrder(tree->right, v, depth + 100);
}
bool isSymmetric(TreeNode* root) {
vector <int> v;
inOrder(root, v, 0);
for(int i = 0; i < v.size() / 2; i++) {
if(v[i] != v[v.size() - i - 1]) return false;
}
return true;
}
};
*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.
'Algorithm > 자료구조' 카테고리의 다른 글
(C++) - LeetCode (easy) 110. Balanced Binary Tree (0) | 2022.11.23 |
---|---|
(C++) - LeetCode (easy) 108. Convert Sorted Array to Binary Search Tree (0) | 2022.11.22 |
(C++) - LeetCode (easy) 100. Same Tree (0) | 2022.11.15 |
(C++) - LeetCode (easy) 94. Binary Tree Inorder Traversal (0) | 2022.11.14 |
(C++) - LeetCode (easy) 83. Remove Duplicates from Sorted List (0) | 2022.11.12 |