Advertisement
Eternoseeker

Threaded BT

Dec 13th, 2022 (edited)
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.97 KB | Source Code | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct node{
  5.     int data, rch, lch;
  6.     node *right, *left;
  7. };
  8.  
  9. class tbt{
  10.     node *root;
  11.     node *dummy;
  12. public:
  13.     tbt(){
  14.         root=NULL;
  15.         dummy = new node;
  16.         dummy -> left = dummy -> right = NULL;
  17.         dummy -> lch = dummy -> rch = 0;
  18.     }
  19.  
  20.     void create(int v){
  21.         node* nn = new node;
  22.         nn -> data = v;
  23.         if(root == NULL){
  24.             root = NULL;
  25.             root -> left = root -> right = dummy;
  26.             dummy -> left = root;
  27.             return;
  28.         }
  29.         else{
  30.             node *t, *parent;
  31.             t = root;
  32.             parent = dummy;
  33.             while(t != NULL){
  34.                 parent = NULL;
  35.                 if(nn -> data < t -> data){
  36.                     if(t -> lch == 1){
  37.                         t = t -> left;
  38.                     }
  39.                     else{
  40.                         t = NULL;
  41.                     }
  42.                 }
  43.                 else{
  44.                     if(t->rch==1){
  45.                         t=t->right;
  46.                     }
  47.                     else{
  48.                         t=NULL;
  49.                     }
  50.                 }
  51.             }
  52.             if(nn -> data < parent -> data)
  53.                      {
  54.                          nn -> left = parent -> left;
  55.                          nn -> right = parent;
  56.                          parent -> lch = 1;
  57.                          parent -> left = nn;
  58.                      }
  59.                      else
  60.                      {
  61.                          nn -> right = parent -> right;
  62.                          nn -> left = parent;
  63.                          parent -> right = nn;
  64.                          parent -> rch = 1;
  65.                      }
  66.                         return;
  67.         }
  68.     }
  69.  
  70.     void inorder(){
  71.         node *t;
  72.              t=root;
  73.              while (1)
  74.              {
  75.                  while(t->lch==1)
  76.                  {
  77.                      t=t->left;
  78.                  }
  79.                  cout<<t->data<<" ";
  80.                  while(t->rch==0)
  81.                  {
  82.                      if(t->right==dummy)
  83.                      {
  84.                          return;
  85.                      }
  86.                      else
  87.                      {
  88.                          t=t->right;
  89.                          cout<<t->data<<" ";
  90.                      }
  91.  
  92.                  }
  93.                  t=t->right;
  94.              }
  95.     }
  96.  
  97.     void preorder(){
  98.         node *t;
  99.             t=root;
  100.             while(1)
  101.             {
  102.  
  103.                  while(t->lch==1)
  104.                  {
  105.                      cout<<t->data<<" ";
  106.                              t=t->left;
  107.                  }
  108.                  cout<<t->data<<" ";
  109.                  while(t->rch==0)
  110.                  {
  111.                      if(t->right==dummy)
  112.                      {
  113.                                  return;
  114.                      }
  115.                      else
  116.                      {
  117.                          t=t->right;
  118.                      }
  119.  
  120.                  }
  121.                  t=t->right;
  122.             }
  123.     }
  124.  
  125. };
  126.  
  127. int main(){
  128.     tbt a;
  129.     a.create(10);
  130.     a.create(20);
  131.     a.create(30);
  132.     return 0;
  133. }
  134.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement