Pages

Tuesday, January 18, 2011

Binary Sorted Tree : Source Code

  1. #include
  2. #include
  3. #include
  4. struct tree
  5. {
  6. int data;
  7. tree *left;
  8. tree *right;
  9. }*root;
  10.  
  11. void main()
  12. {
  13. root=NULL;
  14. int d;
  15. void add();
  16. void traverse(tree *);
  17. tree* del(tree *,int);
  18. int c;
  19. do
  20. {
  21. printf("\nM A I N M E N U ");
  22. printf("\n=====================");
  23. printf("\n1. Add a node ");
  24. printf("\n2. Display tree");
  25. printf("\n3. Delete a node");
  26. printf("\n4. Quit");
  27. printf("\nSelect your choice ");
  28. scanf("%d",&c);
  29. if(c==1)
  30. add();
  31. else if(c==2)
  32. traverse(root);
  33. else if(c==3)
  34. {
  35. printf("\nEnter data to delete ");
  36. scanf("%d",&d);
  37. root=del(root,d);
  38. }
  39. }while(c!=4);
  40. }
  41.  
  42. void add()
  43. {
  44. printf("\nAdd a node ");
  45. tree *t,*prev;
  46. tree *search(tree *,int);
  47. t=(tree *)malloc(sizeof(tree));
  48. printf("\nEnter data ");
  49. scanf("%d",&t->data);
  50. if(root==NULL)
  51. {
  52. root=t;
  53. t->left=NULL;
  54. t->right=NULL;
  55. }
  56. else
  57. {
  58. prev=search(root,t->data);
  59. if(prev==NULL)
  60. {
  61. printf("\nNode already exists");
  62. return;
  63. }
  64. else if(prev->data>t->data)
  65. {
  66. prev->left=t;
  67. }
  68. else
  69. prev->right=t;
  70. t->left=NULL;
  71. t->right=NULL;
  72. }
  73. printf("\nNode Added ");
  74. }
  75.  
  76. tree *search(tree *r,int d)
  77. {
  78. tree *prev;
  79. while(r!=NULL)
  80. {
  81. if(r->data==d)
  82. return NULL;
  83. else if(r->data>d)
  84. {
  85. prev=r;
  86. r=r->left;
  87. }
  88. else
  89. {
  90. prev=r;
  91. r=r->right;
  92. }
  93. }
  94. return prev;
  95. }
  96. void traverse(tree *r)
  97. {
  98. if(r==NULL)
  99. return;
  100. traverse(r->left);
  101. printf("\n%d",r->data);
  102. traverse(r->right);
  103. }
  104. tree *del(struct tree *root, int key)
  105. {
  106. tree *p,*p2;
  107. if(!root)
  108. return root;
  109. if(root->data == key)
  110. {
  111. if(root->left == root->right){
  112. free(root);
  113. return NULL;
  114. }
  115. else if (root->left == NULL)
  116. {
  117. p = root->right;
  118. free(root);
  119. return p;
  120. }
  121. else if(root->right == NULL)
  122. {
  123. p = root->left;
  124. free(root);
  125. return p;
  126. }
  127. else
  128. {
  129. p2 = root->right;
  130. p = root->right;
  131. while(p->left)
  132. p = p->left;
  133. p->left = root->left;
  134. free(root);
  135. return p2;
  136. }
  137. }
  138. if(root->data < key)
  139. root->right = del(root->right, key);
  140. else
  141. root->left = del(root->left, key);
  142. return root;
  143. }

0 comments:

Post a Comment