Preorder Traversal 전위순휘
노드 - 왼쪽 서브트리 - 오른쪽 서브트리
class Solution {
public:
vector<int> ans;
void helper(TreeNode* root){
if(!root) return;
ans.push_back(root->val);
helper(root->left);
helper(root->right);
}
vector<int> preorderTraversal(TreeNode* root) {
helper(root);
return ans;
}
};
Inorder Traversal 중위순회
왼쪽 서브트리 -> 노드 -> 오른쪽 서브트리
class Solution {
public:
vector<int> ans;
void helper(TreeNode* root){
if(!root) return;
helper(root->left);
ans.push_back(root->val);
helper(root->right);
}
vector<int> inorderTraversal(TreeNode* root) {
helper(root);
return ans;
}
};
Postorder Traversal 후위순회
왼쪽 서브트리 -> 오른쪽 서브트리 -> 노드
class Solution {
public:
vector<int> ans;
void helper(TreeNode* root){
if(!root) return;
helper(root->left);
helper(root->right);
ans.push_back(root->val);
}
vector<int> postorderTraversal(TreeNode* root) {
helper(root);
return ans;
}
};
Symmetric Tree
class Solution {
public:
bool helper(TreeNode* left, TreeNode* right){
// 둘 다 존재하지 않을 시 true
if(!left&&!right) return true;
// 둘 중에 하나만 없으면 false
else if(!left||!right) return false;
// 거울로 비춘다고 생각했을 때, left->val과 right->val은 같아야 한다.
else if(left->val!=right->val) return false;
return helper(left->left,right->right)&&helper(left->right,right->left);
}
bool isSymmetric(TreeNode* root) {
if(!root) return true;
return helper(root->left,root->right);
}
};