C++ Program to Implement Ternary Tree


A ternary tree, is a tree data structure in which each node has at most three child nodes, usually represented as “left”, “mid” and “right”. In this tree, nodes with children are parent nodes, and child nodes may contain references to their parents. This is a C++ Program to Implement Ternary Tree and traversal of the tree.

Algorithm

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.

For Traversal of tree:

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.

Example

#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);
}

Output

Following is traversal of ternary tree
bat
hat
mat
rat

Updated on: 30-Jul-2019

381 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements