Threaded binary search tree

Embed Size (px)

Citation preview

  • 8/6/2019 Threaded binary search tree

    1/5

    //Threaded Binary Search tree

    #include#include#include

    #include

    int count=0;

    typedef struct node node;

    struct node{int data,lt,rt;node* llink;node* rlink;};

    void preorder(node* );void inorder(node* );void postorder(node* );node *threading();

    main(void){

    int ch;node *root=NULL;

    do

    {

    printf("\n1:Create threaded BST tree\n2:Preorder\n3:Inorder\n4:Postorder\n5:Exit\n");scanf("%d",&ch);

    switch(ch){

    case 1:root=threading();

    break;

    case 2:preorder(root);

    break;

    case 3:inorder(root);

    break;

    case 4:postorder(root);

    break;

    case 5:exit(0);

    break;

  • 8/6/2019 Threaded binary search tree

    2/5

    }}while(ch!=5);

    getch();}

    node *threading()

    {

    int n,num,x=0;

    node* root,*link,*link1,*temp;

    printf("\nHow many nodes do you want ?\n");scanf("%d",&n);count=n;

    root=(node*)malloc(sizeof(struct node));

    printf("Enter the data\n");scanf("%d",&(root->data));

    root->rt=0;root->lt=0;root->llink=NULL;root->rlink=NULL;link=root;n--;

    while(n--){

    printf("Enter the data\n");scanf("%d",&num);

    link=root;

    while(link){

    if((num>link->data)&&(link->rt!=1)){x=0;link1=link;link=link->rlink;}

    else if((num>link->data)&&(link->rt==1)){x=0;link1=link;link=link->rlink;break;}

    else if((numdata)&&(link->lt!=1)){

    x=1;link1=link;link=link->llink;

  • 8/6/2019 Threaded binary search tree

    3/5

    }

    else if((numdata)&&(link->lt==1)){x=1;link1=link;link=link->llink;

    break;}

    } //End of inner loop

    if(x==0) //for right branch{

    temp=(node*)malloc(sizeof(node));temp->data=num;temp->lt=1;temp->llink=link1;

    if(link1->rt==1)

    {temp->rlink=link1->rlink;temp->rt=1;link1->rt=0;}

    else{temp->rt=0;temp->rlink=NULL;}

    link1->rlink=temp;

    }

    else{

    temp=(node*)malloc(sizeof(node)); //left branchtemp->data=num;temp->rt=1;temp->rlink=link1;

    if(link1->lt==1){temp->lt=1;temp->llink=link1->llink;link1->lt=0;}

    else{temp->lt=0;temp->llink=NULL;}

    link1->llink=temp;

    }

    }return root;

  • 8/6/2019 Threaded binary search tree

    4/5

    }//..........................Preorder traversal.................................

    void preorder(node* link){while(link)

    {

    while(link->llink!=NULL && link->lt==0){printf(" %d ",link->data);link=link->llink;}

    printf("%d ",link->data);while(link->rt==1)

    {link=link->rlink;}link=link->rlink;

    }}

    //.........................Inorder Traversal...................................

    void inorder(node* link){while(link)

    {while(link->llink!=NULL && link->lt==0)link=link->llink;

    printf(" %d ",link->data);

    while(link->rt==1){link=link->rlink;printf("%d ",link->data);}link=link->rlink;

    }}

    //.........................Postorder Traversal.................................

    void postorder(node* link){int *store,i=0;

    store=(int *)malloc(count * sizeof(int));

    while(i!=count){while(link->rt==0 && link->rlink!=NULL)

    {*(store+i)=link->data;i++;link=link->rlink;

    }

    *(store+i)=link->data;

  • 8/6/2019 Threaded binary search tree

    5/5

    i++;

    while(link->lt==1){link=link->llink;

    }link=link->llink;

    }for(i=count-1;i>=0;i--)

    {printf(" %d ",*(store+i));

    }}/*..........................................................................*/