ํธ๋ฆฌ (Tree) ๋?
- ํธ๋ฆฌ๋ ๊ณ์ธต์ ์ธ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ์๋ฃ๊ตฌ์กฐ๋ก, ๋ถ๋ชจ์ ์์ ๋ ธ๋ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ํ๋ธ๋ค.
- ๋ฐ์ดํฐ ๊ตฌ์กฐํ๊ฐ ์ฉ์ดํด ํ์ผ ์์คํ , ๊ณ์ธต์ ๋ฐ์ดํฐ ์ ์ฅ ๋ฑ์ ์ฌ์ฉ ๊ฐ๋ฅ.

์ฅ๋จ์
์ฅ์
- ๋ฐ์ดํฐ ๊ฒ์, ์ฝ์ , ์ญ์ ๊ฐ ํจ์จ์ (ํนํ ์ด์ง ํ์ ํธ๋ฆฌ์ ๊ฒฝ์ฐ).
- ๋ฐ์ดํฐ ๊ตฌ์กฐํ๊ฐ ์ฉ์ดํด ํ์ผ ์์คํ , ๊ณ์ธต์ ๋ฐ์ดํฐ ์ ์ฅ ๋ฑ์ ์ฌ์ฉ ๊ฐ๋ฅ.
๋จ์
- ๊ท ํ์ด ๋ง์ง ์์ ๊ฒฝ์ฐ ์ฑ๋ฅ ์ ํ ๊ฐ๋ฅ.
- ๊ตฌํ์ด ๋ณต์กํ๊ณ ๋ ธ๋ ์ถ๊ฐ ์ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋ ๋ฐ์
ํธ๋ฆฌ (Tree)๋ ๋์ถฉ๋ณด๋ฉด ๋งํฌ๋๋ฆฌ์คํธ (Linked List)๋ ๊ตฌ์กฐ๊ฐ ๋น์ทํ๋ค๊ณ ์๊ฐํ ์๋ ์๋๋ฐ.
ํธ๋ฆฌ (Tree)์ ๊ฒฝ์ฐ์๋ ํ๋์ ๋ถ๋ชจ๊ฐ ์ฌ๋ฌ๊ฐ์ ์์์ ๊ฐ์ง๊ณ ์๊ณ , ์ต์์์ ๋ ธ๋์ ๊ฒฝ์ฐ์๋ ๋ถ๋ชจ๊ฐ ๋ฐ๋ก ์๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.

๊ตฌํ
#include <map> ์ ํ์ฉํ ๋ค์ค๊ณ์ธต ํธ๋ฆฌ๊ตฌํ
#include <iostream>
#include <string>
#include <map>
class TreeNode
{
private:
std::string data;
std::map<std::string, std::shared_ptr<TreeNode> > children;
public:
TreeNode(const std::string& value) : data(value) {};
~TreeNode() {};
std::string getData() { return data; }
std::map<std::string, std::shared_ptr<TreeNode> > getChildren() { return children; }
std::shared_ptr<TreeNode> getChild(const std::string& childName) {
return children[childName];
}
void addChild(const std::string& childName) {
children[childName] = std::make_shared<TreeNode>(childName);
}
};
void printTree(const std::shared_ptr<TreeNode>& node, int level = 0) {
if (!node) return;
std::cout << std::string(level * 2, ' ') << node->getData() << std::endl;
for (const auto& child : node->getChildren()) {
printTree(child.second, level + 1);
}
}
int main() {
auto root = std::make_shared<TreeNode>("A");
root->addChild("B");
root->addChild("C");
root->getChild("B")->addChild("D");
root->getChild("B")->addChild("E");
root->getChild("C")->addChild("F");
root->getChild("C")->addChild("G");
root->getChild("C")->addChild("H");
printTree(root);
return 0;
}
- ์ด์ง ํธ๋ฆฌ, AVL ํธ๋ฆฌ, ๋ ๋-๋ธ๋ ํธ๋ฆฌ ๋ฑ ์ฌ๋ฌ ๋ณํ ์กด์ฌํ๋ค.
'CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ๊ตฌ์กฐ] ํธ๋ผ์ด (Trie) (0) | 2024.11.08 |
---|---|
[์๋ฃ๊ตฌ์กฐ] ๊ทธ๋ํ (Graph) (0) | 2024.11.07 |
[์๋ฃ๊ตฌ์กฐ] ๋งํฌ๋๋ฆฌ์คํธ (Linked list) (0) | 2024.10.30 |
[์๋ฃ๊ตฌ์กฐ] ํ (Queue) (0) | 2024.10.30 |
[์๋ฃ๊ตฌ์กฐ] ์คํ (Stack) (0) | 2024.10.29 |
ํธ๋ฆฌ (Tree) ๋?
- ํธ๋ฆฌ๋ ๊ณ์ธต์ ์ธ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ์๋ฃ๊ตฌ์กฐ๋ก, ๋ถ๋ชจ์ ์์ ๋ ธ๋ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ํ๋ธ๋ค.
- ๋ฐ์ดํฐ ๊ตฌ์กฐํ๊ฐ ์ฉ์ดํด ํ์ผ ์์คํ , ๊ณ์ธต์ ๋ฐ์ดํฐ ์ ์ฅ ๋ฑ์ ์ฌ์ฉ ๊ฐ๋ฅ.

์ฅ๋จ์
์ฅ์
- ๋ฐ์ดํฐ ๊ฒ์, ์ฝ์ , ์ญ์ ๊ฐ ํจ์จ์ (ํนํ ์ด์ง ํ์ ํธ๋ฆฌ์ ๊ฒฝ์ฐ).
- ๋ฐ์ดํฐ ๊ตฌ์กฐํ๊ฐ ์ฉ์ดํด ํ์ผ ์์คํ , ๊ณ์ธต์ ๋ฐ์ดํฐ ์ ์ฅ ๋ฑ์ ์ฌ์ฉ ๊ฐ๋ฅ.
๋จ์
- ๊ท ํ์ด ๋ง์ง ์์ ๊ฒฝ์ฐ ์ฑ๋ฅ ์ ํ ๊ฐ๋ฅ.
- ๊ตฌํ์ด ๋ณต์กํ๊ณ ๋ ธ๋ ์ถ๊ฐ ์ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋ ๋ฐ์
ํธ๋ฆฌ (Tree)๋ ๋์ถฉ๋ณด๋ฉด ๋งํฌ๋๋ฆฌ์คํธ (Linked List)๋ ๊ตฌ์กฐ๊ฐ ๋น์ทํ๋ค๊ณ ์๊ฐํ ์๋ ์๋๋ฐ.
ํธ๋ฆฌ (Tree)์ ๊ฒฝ์ฐ์๋ ํ๋์ ๋ถ๋ชจ๊ฐ ์ฌ๋ฌ๊ฐ์ ์์์ ๊ฐ์ง๊ณ ์๊ณ , ์ต์์์ ๋ ธ๋์ ๊ฒฝ์ฐ์๋ ๋ถ๋ชจ๊ฐ ๋ฐ๋ก ์๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.

๊ตฌํ
#include <map> ์ ํ์ฉํ ๋ค์ค๊ณ์ธต ํธ๋ฆฌ๊ตฌํ
#include <iostream>
#include <string>
#include <map>
class TreeNode
{
private:
std::string data;
std::map<std::string, std::shared_ptr<TreeNode> > children;
public:
TreeNode(const std::string& value) : data(value) {};
~TreeNode() {};
std::string getData() { return data; }
std::map<std::string, std::shared_ptr<TreeNode> > getChildren() { return children; }
std::shared_ptr<TreeNode> getChild(const std::string& childName) {
return children[childName];
}
void addChild(const std::string& childName) {
children[childName] = std::make_shared<TreeNode>(childName);
}
};
void printTree(const std::shared_ptr<TreeNode>& node, int level = 0) {
if (!node) return;
std::cout << std::string(level * 2, ' ') << node->getData() << std::endl;
for (const auto& child : node->getChildren()) {
printTree(child.second, level + 1);
}
}
int main() {
auto root = std::make_shared<TreeNode>("A");
root->addChild("B");
root->addChild("C");
root->getChild("B")->addChild("D");
root->getChild("B")->addChild("E");
root->getChild("C")->addChild("F");
root->getChild("C")->addChild("G");
root->getChild("C")->addChild("H");
printTree(root);
return 0;
}
- ์ด์ง ํธ๋ฆฌ, AVL ํธ๋ฆฌ, ๋ ๋-๋ธ๋ ํธ๋ฆฌ ๋ฑ ์ฌ๋ฌ ๋ณํ ์กด์ฌํ๋ค.
'CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ๊ตฌ์กฐ] ํธ๋ผ์ด (Trie) (0) | 2024.11.08 |
---|---|
[์๋ฃ๊ตฌ์กฐ] ๊ทธ๋ํ (Graph) (0) | 2024.11.07 |
[์๋ฃ๊ตฌ์กฐ] ๋งํฌ๋๋ฆฌ์คํธ (Linked list) (0) | 2024.10.30 |
[์๋ฃ๊ตฌ์กฐ] ํ (Queue) (0) | 2024.10.30 |
[์๋ฃ๊ตฌ์กฐ] ์คํ (Stack) (0) | 2024.10.29 |