Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

삼항 트리를 구현하는 C++ 프로그램

<시간/>

삼항 트리는 각 노드가 최대 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