Wednesday, January 31, 2024

Binary Threaded Tree- DSTC using C Language (Source Code Implemented)

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: