250x250
반응형
Notice
Recent Posts
Recent Comments
Link
N
(Leet Code c++)Symmetric Tree 본문
728x90
반응형
101. Symmetric Tree
Given the root of a binary tree, check whether it is a mirror of itself (i.e., symmetric around its center).
Example 1:
Input: root = [1,2,2,3,4,4,3] Output: true
Example 2:
Input: root = [1,2,2,null,3,null,3] Output: false
Constraints:
- The number of nodes in the tree is in the range [1, 1000].
- -100 <= Node.val <= 100
루트의 왼쪽 자식에 있는 원소들과 오른쪽 자식에 있는 원소들이 서로 대칭인지 확인하는 문제.
전위 순회를 바탕으로 왼쪽 노드 먼저 방문하는 전위 순회 함수, 오른쪽 노드를 먼저 방문하는 전위 순회 함수를 정의해 방문했다.
preorderLeft() 함수는 루트의 왼쪽 자식 노드가 루트가 되고, 현재 노드 -> 왼쪽 자식 노드 -> 오른쪽 자식 노드 순서로 순회한다.
preorderRight() 함수는 루트의 오른쪽 자식 노드가 루트가 되고, 현재 노드 -> 오른쪽 자식 노드 -> 왼쪽 자식 노드 순서로 순회한다.
순회를 통해 value를 각각 a, b 벡터에 저장했다.
두 벡터의 사이즈가 같지 않다면 바로 false를 리턴.
사이즈가 같다면 원소가 서로 같은지 확인하면 된다.
같지 않다면 false를 리턴,
모두 같다면 while문을 탈출해 ture를 리턴하게 된다.
/**
* 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 preorderLeft(TreeNode * node, vector<int> &v){
v.push_back(node->val);
if(node->left != NULL){
preorderLeft(node->left, v);
}
else{
v.push_back(200);
}
if(node->right != NULL){
preorderLeft(node->right, v);
}
else{
v.push_back(200);
}
}
void preorderRight(TreeNode * node, vector<int> &v){
v.push_back(node->val);
if(node->right != NULL){
preorderRight(node->right, v);
}
else{
v.push_back(200);
}
if(node->left != NULL){
preorderRight(node->left, v);
}
else{
v.push_back(200);
}
}
bool isSymmetric(TreeNode* root) {
vector<int> left;
vector<int> right;
if(root != NULL){
int aIndex = 0;
int bIndex = 0;
if(root-> left != NULL){
preorderLeft(root->left, left);
}
if(root->right != NULL){
preorderRight(root->right, right);
}
if(left.size() != right.size()){
return false;
}
else{
while(aIndex < left.size() && bIndex < right.size()){
if(left[aIndex++] != right[bIndex++]){
return false;
}
}
}
}
return true;
}
};
728x90
반응형
'Leet Code 알고리즘' 카테고리의 다른 글
(Leet Code c++)Concatenation of Array (0) | 2021.07.14 |
---|---|
(Leet Code c++)Maximum Depth of Binary Tree (0) | 2021.07.14 |
(Leet Code c++)Same Tree (0) | 2021.07.13 |
(Leet Code c++)Merge Sorted Array (0) | 2021.07.13 |
(Leet Code c++)Binary Tree Inorder Traversal (0) | 2021.07.12 |