문제에 나온 TreeNode struct 분석
struct TreeNode {
int val; // 이 노드가 저장할 값 (예: 숫자 1, 2, 3...)
TreeNode *left; // 왼쪽 자식 노드의 주소를 가리키는 포인터
TreeNode *right; // 오른쪽 자식 노드의 주소를 가리키는 포인터
// 아래 3줄은 노드를 쉽게 만들기 위한 "생성자(Constructor)"입니다.
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) {}
};
TreeNode node; 혹은 TreeNode* ptr 라고 했을 때
. 사용 : node.val = 10;-> 사용 : ptr->val = 10;.) 기호를 사용함 (node.val)->) 기호를 사용함 (node_ptr->val)nullptr로 비어있는 상태를 명확히 표현할 수 있음
/**
* 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:
TreeNode* invertTree(TreeNode* root) {
}
};
모든 노드의 왼쪽 오른쪽 자식 위치 바꾸는 문제
트리 문제는 재귀 방식으로 접근하면 됨 (root -> leaf 노드로)
현재 root 의 왼쪽과 오른쪽을 swap
이후 root 의 왼쪽과 오른쪽에 대해 swap 하는 것을 재귀적으로 수행
재귀 후 root 노드 반환
참고 : 일반 구조체 변수 node로 주면 아래 연결된 노드들 전체를 복사해서 전달해야 됨. 따라서 문제에서는 맨 위 시작 노드인 root 의 포인터 주소로 struct 제공함

root->val: 루트 노드의 값인 1에 접근함root->left: 왼쪽 자식 노드(val: 2)가 있는 주소root->right: 오른쪽 자식 노드(val: 3)가 있는 주소/**
* 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:
TreeNode* invertTree(TreeNode* root) {
if (root == nullptr) return nullptr;
std::swap(root->left, root->right);
invertTree(root->left);
invertTree(root->right);
return root;
}
};
해맨만큼 네 땅 이다