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. if(root==NULL||firstChild==NULL)
  55. return;
  56. Node *nextFirstChild = NULL,*rootTemp,*currChild;
  57. currChild = firstChild;
  58.  
  59. printf("\n%d\t",currChild->data);
  60. if(root->right!=NULL)
  61. {
  62. currChild->next = root->right;
  63. if(nextFirstChild==NULL&&currChild->left!=NULL)
  64. nextFirstChild = currChild->left;
  65. else if(nextFirstChild==NULL&&currChild->right!=NULL)
  66. nextFirstChild = currChild->right;
  67. currChild = currChild->next;
  68. printf("%d\t",currChild->data);
  69. }
  70.  
  71. rootTemp = root->next;
  72.  
  73. while(rootTemp!=NULL)
  74. {
  75. if(rootTemp->left!=NULL)
  76. {
  77. currChild->next = rootTemp->left;
  78. if(nextFirstChild==NULL&&currChild->left!=NULL)
  79. nextFirstChild = currChild->left;
  80. else if(nextFirstChild==NULL&&currChild->right!=NULL)
  81. nextFirstChild = currChild->right;
  82. currChild = currChild->next;
  83. printf("%d\t",currChild->data);
  84. }
  85. if(rootTemp->right!=NULL)
  86. {
  87. currChild->next = rootTemp->right;
  88. if(nextFirstChild==NULL&&currChild->left!=NULL)
  89. nextFirstChild = currChild->left;
  90. else if(nextFirstChild==NULL&&currChild->right!=NULL)
  91. nextFirstChild = currChild->right;
  92. currChild = currChild->next;
  93. printf("%d\t",currChild->data);
  94. }
  95. rootTemp = rootTemp->next;
  96. }
  97. if(nextFirstChild==NULL&&currChild->left!=NULL)
  98. nextFirstChild = currChild->left;
  99. else if(nextFirstChild==NULL&&currChild->right!=NULL)
  100. nextFirstChild = currChild->right;
  101.  
  102. currChild->next = NULL;
  103. MarkSibling(firstChild,nextFirstChild);
  104. }
  105.  
  106.  
  107. int main()
  108. {
  109. Node* root = (Node*)malloc(sizeof(Node));
  110. root->data = 4;
  111. root->left = NULL;
  112. root->right= NULL;
  113. root->next= NULL;
  114.  
  115. AddNode(root,3);
  116. AddNode(root,7);
  117. AddNode(root,1);
  118. AddNode(root,2);
  119. AddNode(root,6);
  120. AddNode(root,9);
  121. AddNode(root,17);
  122. AddNode(root,11);
  123. AddNode(root,10);
  124. AddNode(root,3);
  125. AddNode(root,4);
  126.  
  127. printf("%d/n",root->data);
  128. if(root->left!=NULL)
  129. MarkSibling(root,root->left);
  130. else
  131. MarkSibling(root,root->right);
  132.  
  133.  
  134. return 0;
  135. }
Success #stdin #stdout 0.01s 1852KB
stdin
Standard input is empty
stdout
4/n
3	7	
1	6	9	
2	2	17	
11	11	
10