CS

[์ž๋ฃŒ๊ตฌ์กฐ] ํŠธ๋ฆฌ (Tree)

2024. 11. 7. 01:53

ํŠธ๋ฆฌ (Tree) ๋ž€?

  • ํŠธ๋ฆฌ๋Š” ๊ณ„์ธต์ ์ธ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ, ๋ถ€๋ชจ์™€ ์ž์‹ ๋…ธ๋“œ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • ๋ฐ์ดํ„ฐ ๊ตฌ์กฐํ™”๊ฐ€ ์šฉ์ดํ•ด ํŒŒ์ผ ์‹œ์Šคํ…œ, ๊ณ„์ธต์  ๋ฐ์ดํ„ฐ ์ €์žฅ ๋“ฑ์— ์‚ฌ์šฉ ๊ฐ€๋Šฅ.

ํŠธ๋ฆฌ (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
  1. ํŠธ๋ฆฌ (Tree) ๋ž€?
  2. ์žฅ๋‹จ์ 
  3. ๊ตฌํ˜„
moaoh
moaoh
๋‚˜์˜ ์„ฑ์žฅ ์ผ๊ธฐ.
moaoh
๐Ÿถ ๐Ÿพ
moaoh
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • Github
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
    • Algorithm
      • ๊ฐœ๋…์ •๋ฆฌ
      • ๋ฌธ์ œํ’€์ด
    • 42seoul
      • projects
    • CS
    • programming language
      • C++
      • Javascript
      • Go
      • Python
      • Front-end
      • Java
    • Java Spring
    • git
    • ์ผ์ƒ
      • ์ฑ… ์ฝ๊ธฐ

์ตœ๊ทผ ๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ
moaoh
[์ž๋ฃŒ๊ตฌ์กฐ] ํŠธ๋ฆฌ (Tree)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.