[ 연습용 코드 ]
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <stack>
#include <algorithm>
#include <iostream>
#include <set>
using namespace std;
struct TreeNode
{
int val;
TreeNode* left = nullptr;
TreeNode* right = nullptr;
TreeNode() : val(0) {}
TreeNode(int x) : val(x) {}
TreeNode(int x, TreeNode* left, TreeNode* right) : val(x), left(left), right(right) { }
};
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root)
{
}
};
int main()
{
TreeNode n3(3, nullptr, nullptr);
TreeNode n4(4, nullptr, nullptr);
TreeNode n2(2, &n3, &n4);
TreeNode n5(5, nullptr, nullptr);
TreeNode n1(1, &n2, &n5);
Solution s;
vector<int> result = s.preorderTraversal(&n1); // [1 2 3 4 5]
return 0;
}
[ Pre-order : 재귀버전 ]
class Solution {
public:
vector<int> result;
vector<int> preorderTraversal(TreeNode* root)
{
if (root == nullptr)
return result;
result.push_back(root->val);
preorderTraversal(root->left);
preorderTraversal(root->right);
return result;
}
};
[ Pre-order : 반복문 버전 ]
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root)
{
stack<TreeNode*> s;
vector<int> result;
if (root == nullptr)
return result;
s.push(root);
TreeNode* now = nullptr;
while (s.empty() == false)
{
now = s.top();
s.pop();
result.push_back(now->val);
// LIFO 이므로 right를 먼저 넣는다.
if (now->right) s.push(now->right);
if (now->left) s.push(now->left);
}
return result;
}
};
'Algorithm > Data Structure' 카테고리의 다른 글
[Leetcode] Binary Tree Inorder Traversal (0) | 2021.07.06 |
---|---|
4. LinkedList 구현하기 (0) | 2021.02.03 |
3. 동적 배열 구현 (0) | 2021.01.30 |
[C++ STL] set / multiset (0) | 2019.11.05 |
2. 큐(Queue) / 원형큐(Circular Queue) (0) | 2018.08.04 |