BINARY THREADED TREE
Implemented using C Language
C Language Code:
TREETHRD.CPP
// DSTC -- TREETHRD.CPP .... using Header file TREETHRD.H
// Binary Seach tree (threaded ...)
# include <stdio.h>
# include <conio.h>
# include "treethrd.h"
void main()
{
btt *b ;
node *n ;
b = createbtt() ;
nodeadd(b,20) ;
nodeadd(b,12) ;
nodeadd(b,25) ;
nodeadd(b,15) ;
printbtt(b) ;
}
TREETHRD.H
// DSTC --- TREETHRD.H .... // Binary Threaded Tree ...
#include <stdlib.h>
typedef struct BinTreeThread
{
struct BinTreeThread *left,*right;
int info;
int lth,rth ;
}node ;
typedef struct s
{
node *head;
}btt;
// CREATING A BINARY THREADED Search TREE ...
btt *createbtt(void)
{
btt *b = (btt*)malloc(sizeof(btt));
node *n1 = (node *)malloc(sizeof(node));
n1->left = n1->right = n1 ;
n1->lth = n1->rth = 1 ;
n1->info = -1 ;
b->head = n1 ;
return b;
}// ADD A NODE INTO Binay Threaded Tree
void nodeadd(btt *b,int v)
{
node *newn, *temp=b->head->left ;
newn = (node *)malloc(sizeof(node));
newn->info = v ;
newn->lth = newn->rth = 1 ;
if (temp == b->head)
{
newn->left = b->head ;
newn->right = b->head ;
b->head->left = newn;
b->head->lth = 0 ;
return ;
}
else
{
while(temp != b->head)
{
if (temp->info < v)
{
if (temp->rth == 1)
{
newn->right = temp->right ;
temp->right = newn;
temp->rth = 0 ;
newn->left = temp ;
return;
}
else
{
temp = temp->right ;
}
}
else
{
if (temp->lth == 1)
{
newn->left = temp->left ;
temp->left = newn ;
temp->lth = 0 ;
newn->right = temp ;
return;
}
else
{
temp = temp->left ;
}
}
}//end while
}//end else
}
node *succ(node *nd)
{
node *p = nd->right ;
if (nd->rth == 1)
return p ;
else
{
while (p->lth != 1)
{
p = p->left ;
}
return p;
}
}
node *predecessor(node *nd)
{
node *p ;
p = nd->left ;
if (nd->lth == 1)
return p;
else
{
while (p->rth != 1)
p = p->right ;
}
return p ;
}
void printbtt(btt *b)
{
node *temp = b->head->left ;
while (temp->left != b->head)
temp = temp->left ;
// printf("%d ",temp->info) ;
while (temp != b->head)
{
printf("%d ", temp->info) ;
temp = succ(temp);
}
}
No comments:
Post a Comment