์ด์ง ํ์ ํธ๋ฆฌ(BST)
- ๊ฐ๊ฐ์ ๋ ธ๋๊ฐ ์ต๋ 2๊ฐ์ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง๋ ์ด์ง ํธ๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ถ๊ณ ์๋ค.
- ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ๊ตฌํ๋๋ค.
๊ธฐ๋ณธ ์๋ฆฌ
- ๋ชจ๋ ๋ ธ๋์ ๊ฐ์ ์ ์ผํ๋ค.
- ๋ฃจํธ ๋ ธ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ์ ์๋ ๊ฐ๋ค์ ๋ฃจํธ ๋ ธ๋์ ๊ฐ๋ณด๋ค ์๋ค.
- ๋ฃจํธ ๋ ธ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฅธ์ชฝ์ ์๋ ๊ฐ๋ค์ ๋ฃจํธ ๋ ธ๋์ ๊ฐ๋ณด๋ค ํฌ๋ค.
- ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ๋ ์ด์ง ํ์ ํธ๋ฆฌ์ด๋ค.
๋ฌธ์
#include <iostream>
using namespace std;
typedef struct node_struct {
int data;
struct node_struct* left;
struct node_struct* right;
}node;
node* insert_node(node* root, int value)
{
if (root == NULL) {
root = new node;
root->left = root->right = NULL;
root->data = value;
}
else {
if (root->data > value)
root->left = insert_node(root->left, value);
else
root->right = insert_node(root->right, value);
}
return root;
}
void pre(node* root) // ์ ์ ์ํ
{
if (root) {
printf("%d ", root->data);
pre(root->left);
pre(root->right);
}
}
void ino(node* root) // ์ค์ ์ํ
{
if (root) {
ino(root->left);
printf("%d ", root->data);
ino(root->right);
}
}
void pos(node* root) // ํ์ ์ํ
{
if (root) {
pos(root->left);
pos(root->right);
printf("%d ", root->data);
}
}
int main()
{
node* root = NULL;
root = insert_node(root, 10);
root = insert_node(root, 5);
root = insert_node(root, 7);
root = insert_node(root, 13);
root = insert_node(root, 1);
root = insert_node(root, 17);
pre(root);
printf("\n\n");
ino(root);
printf("\n\n");
pos(root);
return 0;
}