Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรม C++ เพื่อใช้งาน Ternary Tree


ternary tree เป็นโครงสร้างข้อมูลแบบ tree ซึ่งแต่ละโหนดมีโหนดย่อยไม่เกินสามโหนด ซึ่งมักจะแสดงเป็น "ซ้าย" "กลาง" และ "ขวา" ในแผนผังนี้ โหนดที่มีลูกคือโหนดหลัก และโหนดย่อยอาจมีการอ้างอิงถึงผู้ปกครอง นี่คือโปรแกรม C++ เพื่อใช้ Ternary Tree และการข้ามผ่านของ Tree

อัลกอริทึม

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