fork download
  1. #include<stdio.h>
  2. #include<malloc.h>
  3.  
  4. struct node
  5. {
  6. int data;
  7. struct node* left;
  8. struct node* right;
  9. struct node* next;
  10. };
  11.  
  12. typedef struct node Node;
  13.  
  14. void AddNode(Node* root, int number)
  15. {
  16. if(root->data==number)
  17. return;
  18. else if(root->data>number)
  19. {
  20. if(root->left!=NULL)
  21. {
  22. AddNode(root->left,number);
  23. }
  24. else
  25. {
  26. Node* newNode = (Node*)malloc(sizeof(Node));
  27. newNode->data = number;
  28. newNode->left = NULL;
  29. newNode->right= NULL;
  30. newNode->next= NULL;
  31. root->left = newNode;
  32. }
  33. }
  34. else if(root->data<number)
  35. {
  36. if(root->right!=NULL)
  37. {
  38. AddNode(root->right,number);
  39. }
  40. else
  41. {
  42. Node* newNode = (Node*)malloc(sizeof(Node));
  43. newNode->data = number;
  44. newNode->left = NULL;
  45. newNode->right= NULL;
  46. newNode->next= NULL;
  47. root->right= newNode;
  48. }
  49. }
  50. }
  51.  
  52. void MarkSibling(Node* root, Node* firstChild)
  53. {
  54. while(root!=NULL&&firstChild!=NULL)
  55. {
  56. Node *nextFirstChild = NULL,*rootTemp,*currChild;
  57. currChild = firstChild;
  58.  
  59. printf("\n%d\t",currChild->data);
  60. if(root->right!=NULL&&root->right->data!=firstChild->data)
  61. {
  62. currChild->next = root->right;
  63. if(nextFirstChild==NULL&&currChild->left!=NULL)
  64. {
  65. nextFirstChild = currChild->left;
  66. firstChild = currChild;
  67. }
  68. else if(nextFirstChild==NULL&&currChild->right!=NULL)
  69. {
  70. nextFirstChild = currChild->right;
  71. firstChild = currChild;
  72. }
  73. currChild = currChild->next;
  74. printf("%d\t",currChild->data);
  75. }
  76.  
  77. rootTemp = root->next;
  78.  
  79. while(rootTemp!=NULL)
  80. {
  81. if(rootTemp->left!=NULL)
  82. {
  83. currChild->next = rootTemp->left;
  84. if(nextFirstChild==NULL&&currChild->left!=NULL)
  85. {
  86. nextFirstChild = currChild->left;
  87. firstChild = currChild;
  88. }
  89. else if(nextFirstChild==NULL&&currChild->right!=NULL)
  90. {
  91. nextFirstChild = currChild->right;
  92. firstChild = currChild;
  93. }
  94. currChild = currChild->next;
  95. printf("%d\t",currChild->data);
  96. }
  97. if(rootTemp->right!=NULL)
  98. {
  99. currChild->next = rootTemp->right;
  100. if(nextFirstChild==NULL&&currChild->left!=NULL)
  101. {
  102. nextFirstChild = currChild->left;
  103. firstChild = currChild;
  104. }
  105. else if(nextFirstChild==NULL&&currChild->right!=NULL)
  106. {
  107. nextFirstChild = currChild->right;
  108. firstChild = currChild;
  109. }
  110. currChild = currChild->next;
  111. printf("%d\t",currChild->data);
  112. }
  113. rootTemp = rootTemp->next;
  114. }
  115. if(nextFirstChild==NULL&&currChild->left!=NULL)
  116. {
  117. nextFirstChild = currChild->left;
  118. firstChild = currChild;
  119. }
  120. else if(nextFirstChild==NULL&&currChild->right!=NULL)
  121. {
  122. nextFirstChild = currChild->right;
  123. firstChild = currChild;
  124. }
  125.  
  126. currChild->next = NULL;
  127. root = firstChild;
  128. firstChild = nextFirstChild;
  129. }
  130. }
  131.  
  132.  
  133. int main()
  134. {
  135. Node* root = (Node*)malloc(sizeof(Node));
  136. root->data = 4;
  137. root->left = NULL;
  138. root->right= NULL;
  139. root->next= NULL;
  140.  
  141. AddNode(root,3);
  142. AddNode(root,7);
  143. AddNode(root,1);
  144. AddNode(root,2);
  145. AddNode(root,6);
  146. AddNode(root,9);
  147. AddNode(root,17);
  148. AddNode(root,11);
  149. AddNode(root,10);
  150. AddNode(root,3);
  151. AddNode(root,4);
  152.  
  153. printf("%d",root->data);
  154. if(root->left!=NULL)
  155. MarkSibling(root,root->left);
  156. else
  157. MarkSibling(root,root->right);
  158.  
  159.  
  160. return 0;
  161. }
Success #stdin #stdout 0.01s 1852KB
stdin
Standard input is empty
stdout
4
3	7	
1	6	9	
2	17	
11	
10