Advertisement
Guest User

Untitled

a guest
Jul 21st, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.62 KB | None | 0 0
  1. // Creating and traversing abinary tree
  2. // Preorder , inorder , and postorder
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <time.h>
  7.  
  8. struct treeNode {
  9. struct treeNode* leftPtr; // pointer to left subtree
  10. int data; // node value
  11. struct treeNode* rightPtr; // pointer to right subtree
  12. };
  13.  
  14. typedef struct treeNode TreeNode;
  15. typedef TreeNode* TreeNodePtr;
  16.  
  17. void insertNode(TreeNodePtr* treePtr, int value);
  18. void inOrder(TreeNodePtr treePtr);
  19. void preOrder(TreeNodePtr treePtr);
  20. void postOrder(TreeNodePtr treePtr);
  21.  
  22. int main()
  23. {
  24. int i; // counter to loop 1-10
  25. int item; // varaible to hold random values
  26. TreeNodePtr rootPtr = NULL; // tree initially empty
  27.  
  28. srand(time(NULL));
  29. printf("The numbers being placed in the tree are : ");
  30.  
  31. // insert random values between 0 and 14 in the tree
  32. for (i = 0; i <= 10; i++)
  33. {
  34. item = rand() % 15;
  35. printf(" %d", item);
  36. insertNode(&rootPtr, item);
  37. }
  38.  
  39. // traverse hte tree preOrder
  40. printf("\n\nThe preOrder traversal is : ");
  41. preOrder(rootPtr);
  42.  
  43. // traverse hte tree inOrder
  44. printf("\n\nThe inOrder traversal is : ");
  45. inOrder(rootPtr);
  46.  
  47. // traverse hte tree preOrder
  48. printf("\n\nThe postOrder traversal is : ");
  49. postOrder(rootPtr);
  50. printf("\n");
  51. return 0;
  52. }
  53.  
  54. void insertNode(TreeNodePtr* treePtr, int value)
  55. {
  56. if (*treePtr == NULL) // if tree is empty or the correct location has been found
  57. {
  58. *treePtr = malloc(sizeof(TreeNode));
  59.  
  60. // if the memory is allocated , then assign data
  61. if (*treePtr != NULL)
  62. {
  63. (*treePtr)->data = value;
  64. (*treePtr)->leftPtr = NULL;
  65. (*treePtr)->rightPtr = NULL;
  66. }
  67. else
  68. {
  69. printf("%d not inserted. No memory avaliable.\n", value);
  70. }
  71. }
  72. else // tree is not empty
  73. {
  74. if (value <= (*treePtr)->data) // data to insert is less than data in the current node
  75. {
  76. insertNode(&((*treePtr)->leftPtr), value);
  77. }
  78. else if (value > (*treePtr)->data) // data to insert is greater than data in the current node
  79. {
  80. insertNode(&((*treePtr)->rightPtr), value);
  81. }
  82. else // duplicate data value ignored
  83. {
  84. printf("dup");
  85. }
  86. }
  87. } // end function insertNode
  88.  
  89. void inOrder(TreeNodePtr treePtr)
  90. {
  91. // if tree is not empty , then traverse
  92. if (treePtr != NULL)
  93. {
  94. inOrder(treePtr->leftPtr);
  95. printf("%d ", treePtr->data);
  96. inOrder(treePtr->rightPtr);
  97. }
  98. }
  99.  
  100. void preOrder(TreeNodePtr treePtr)
  101. {
  102. // if tree is not empty , then traverse
  103. if (treePtr != NULL)
  104. {
  105. printf("%d ", treePtr->data);
  106. preOrder(treePtr->leftPtr);
  107. preOrder(treePtr->rightPtr);
  108. }
  109. }
  110.  
  111. void postOrder(TreeNodePtr treePtr)
  112. {
  113. // if tree is not empty , then traverse
  114. if (treePtr != NULL)
  115. {
  116. postOrder(treePtr->leftPtr);
  117. postOrder(treePtr->rightPtr);
  118. printf("%d ", treePtr->data);
  119. }
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement