Algorithm/Data Structure

[Leetcode] Binary Tree Preorder Traversal

lee308812 2021. 7. 5. 21:44

[ 연습용 코드 ]

#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