top of page
Wave
Cactus%20Plant_edited.jpg

THREADED BINARY TREE

#include<stdio.h>
#include<stdlib.h>
typedef struct tbt
{
    int data,th;
    struct tbt *left,*right;
}tbt;
int main()
{
    tbt *get_node(int );
    tbt *create_threaded_btree();
    void set_left(tbt *,tbt *);
    void set_right(tbt *,tbt *);
    void threaded_btree_inorder(tbt *);
    tbt *root=NULL;
    int x;
    do
    {
        printf("-----------------------------------------------------\n");
        printf("|              [THREADED BINARY TREE]                |\n");
        printf("-----------------------------------------------------\n");
        printf("|1.THREADED BINARY TREE [CREATION].                  |\n");
        printf("|2.THREADED BINARY TREE [INORDER TRAVERSING].        |\n");
        printf("|3.[EXIT] FROM THE PROGRAM.                          |\n");
        printf("-----------------------------------------------------\n");
        printf("Enter your choice ");
        scanf("%d",&x);
        printf("\n");
        switch(x)
        {
            case 1:
                root=create_threaded_btree();
                printf("\n");
                break;
            case 2:
                printf("Inorder traversal is : ");
                threaded_btree_inorder(root);
                printf("\n");
                break;
            case 3:    
                exit(0);
            default :
                printf("wrong choice\n\n");    
            }
    }while(1);
    return 1;
}
tbt *get_node(int x)
{
    tbt *p;
    p=(tbt*)malloc(sizeof(tbt));
    p->data=x;
    p->left=NULL;
    p->right=NULL;
    p->th=1;
    return p;
}
void set_left(tbt *p,tbt *r)
{
    p->left=r;
    r->right=p;
}
void set_right(tbt *p,tbt *r)
{
    r->right=p->right;
    p->right=r;
    p->th=0;
}
tbt *create_threaded_btree()
{
    void set_left(tbt *,tbt *);
    void set_right(tbt *,tbt *);
    tbt *root,*p,*q,*r;
    int x;
    printf("Enter the root element: ");
    scanf("%d",&x);
    root=get_node(x);
    printf("(Enter[-999]for stop insertion process) Enter another data: ");
    scanf("%d",&x);
    while(x!=-999)
    {
         p=root;
         q=root;
         while(q!=NULL)
         {
             p=q;
             if(x<q->data)
                 q=q->left;
             else
             {
                 if(q->th==1)
                     q=NULL;
                else
                    q=q->right;             
            }        
        }
        r=get_node(x);
        if(x<p->data)
            set_left(p,r);
        else
            set_right(p,r);    
         printf("(Enter[-999]for stop insertion process) Enter another data: ");
         scanf("%d",&x);
    }
    return root;
}
void threaded_btree_inorder(tbt *root)
{
    tbt *p;
    if(root==NULL)
    {
        printf("Tree not exist");
        return;
    }
    p=root;
    while(p!=NULL)
    {
        while(p->left!=NULL)
            p=p->left;
        while(p!=NULL)
        {
            printf("%d ",p->data);
            if(p->th==0)
            {
                p=p->right;
                break;
            }
            else
                p=p->right;
        }
    }
}

Subscribe Form

Thanks for submitting!

  • Facebook
  • YouTube
  • Instagram
  • Twitter

©2020 by Abhisek Midya ( A18 ). Proudly created with Wix.com

bottom of page