삼항 트리는 각 노드가 최대 3개의 자식 노드를 갖는 트리 데이터 구조이며 일반적으로 "왼쪽", "중간" 및 "오른쪽"으로 표시됩니다. 이 트리에서 자식이 있는 노드는 부모 노드이고 자식 노드에는 부모에 대한 참조가 포함될 수 있습니다. 삼항 트리와 트리 순회를 구현하는 C++ 프로그램입니다.
알고리즘
Begin Declare function insert(struct nod** root, char *w) if (!(*root)) then *root = newnod(*w); if ((*w) < (*root)->d) then insert(&( (*root)->l ), w); else if ((*w) > (*root)->d) then insert(&( (*root)->r ), w); else if (*(w+1)) insert(&( (*root)->eq ), w+1); else (*root)->EndOfString = 1; End.
트리 순회:
Begin Declare function traverseTTtil(struct nod* root, char* buffer, int depth) if (root) then traverseTTtil(root->l, buffer, depth) buffer[depth] = root->d if (root->EndOfString) then buffer[depth+1] = '\0' print the value of buffer. traverseTTtil(root->eq, buffer, depth + 1); traverseTTtil(root->r, buffer, depth); End.
예시
#include<stdlib.h>
#include<iostream>
using namespace std;
struct nod {
char d;
unsigned End.
fString: 1;
struct nod *l, *eq, *r;
}*t = NULL;
struct nod* newnod(char d) {
t = new nod;
t->d = d;
t->End.
fString = 0;
t->l = t->eq = t->r = NULL;
return t;
}
void insert(struct nod** root, char *w) {
if (!(*root))
*root = newnod(*w);
if ((*w) < (*root)->d)
insert(&( (*root)->l ), w);
else if ((*w) > (*root)->d)
insert(&( (*root)->r ), w);
else {
if (*(w+1))
insert(&( (*root)->eq ), w+1);
else
(*root)->End.
fString = 1;
}
}
void traverseTTtil(struct nod* root, char* buffer, int depth) {
if (root) {
traverseTTtil(root->l, buffer, depth);
buffer[depth] = root->d;
if (root->End. String) {
buffer[depth+1] = '\0';
cout<<buffer<<endl;
}
traverseTTtil(root->eq, buffer, depth + 1);
traverseTTtil(root->r, buffer, depth);
}
}
void traverseTT(struct nod* root) {
char buffer[50];
traverseTTtil(root, buffer, 0);
}
int main() {
struct nod *root = NULL;
insert(&root, "mat");
insert(&root, "bat");
insert(&root, "hat");
insert(&root, "rat");
cout<<"Following is traversal of ternary tree\n";
traverseTT(root);
} 출력
Following is traversal of ternary tree bat hat mat rat