#include<stdio.h>
#include<malloc.h>
struct node
{
int data;
struct node* left;
struct node* right;
struct node* next;
};
typedef struct node Node;
void AddNode(Node* root, int number)
{
if(root->data==number)
return;
else if(root->data>number)
{
if(root->left!=NULL)
{
AddNode(root->left,number);
}
else
{
Node
* newNode
= (Node
*)malloc(sizeof(Node
)); newNode->data = number;
newNode->left = NULL;
newNode->right= NULL;
newNode->next= NULL;
root->left = newNode;
}
}
else if(root->data<number)
{
if(root->right!=NULL)
{
AddNode(root->right,number);
}
else
{
Node
* newNode
= (Node
*)malloc(sizeof(Node
)); newNode->data = number;
newNode->left = NULL;
newNode->right= NULL;
newNode->next= NULL;
root->right= newNode;
}
}
}
void MarkSibling(Node* root, Node* firstChild)
{
if(root==NULL||firstChild==NULL)
return;
Node *nextFirstChild = NULL,*rootTemp,*currChild;
currChild = firstChild;
printf("\n%d\t",currChild
->data
); if(root->right!=NULL)
{
currChild->next = root->right;
if(nextFirstChild==NULL&&currChild->left!=NULL)
nextFirstChild = currChild->left;
else if(nextFirstChild==NULL&&currChild->right!=NULL)
nextFirstChild = currChild->right;
currChild = currChild->next;
printf("%d\t",currChild
->data
); }
rootTemp = root->next;
while(rootTemp!=NULL)
{
if(rootTemp->left!=NULL)
{
currChild->next = rootTemp->left;
if(nextFirstChild==NULL&&currChild->left!=NULL)
nextFirstChild = currChild->left;
else if(nextFirstChild==NULL&&currChild->right!=NULL)
nextFirstChild = currChild->right;
currChild = currChild->next;
printf("%d\t",currChild
->data
); }
if(rootTemp->right!=NULL)
{
currChild->next = rootTemp->right;
if(nextFirstChild==NULL&&currChild->left!=NULL)
nextFirstChild = currChild->left;
else if(nextFirstChild==NULL&&currChild->right!=NULL)
nextFirstChild = currChild->right;
currChild = currChild->next;
printf("%d\t",currChild
->data
); }
rootTemp = rootTemp->next;
}
if(nextFirstChild==NULL&&currChild->left!=NULL)
nextFirstChild = currChild->left;
else if(nextFirstChild==NULL&&currChild->right!=NULL)
nextFirstChild = currChild->right;
currChild->next = NULL;
MarkSibling(firstChild,nextFirstChild);
}
int main()
{
Node
* root
= (Node
*)malloc(sizeof(Node
)); root->data = 4;
root->left = NULL;
root->right= NULL;
root->next= NULL;
AddNode(root,3);
AddNode(root,7);
AddNode(root,1);
AddNode(root,2);
AddNode(root,6);
AddNode(root,9);
AddNode(root,17);
AddNode(root,11);
AddNode(root,10);
AddNode(root,3);
AddNode(root,4);
if(root->left!=NULL)
MarkSibling(root,root->left);
else
MarkSibling(root,root->right);
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8bWFsbG9jLmg+CgpzdHJ1Y3Qgbm9kZQp7CiAgaW50IGRhdGE7CiAgc3RydWN0IG5vZGUqIGxlZnQ7CiAgc3RydWN0IG5vZGUqIHJpZ2h0OwogIHN0cnVjdCBub2RlKiBuZXh0Owp9OwoKdHlwZWRlZiBzdHJ1Y3Qgbm9kZSBOb2RlOwoKdm9pZCBBZGROb2RlKE5vZGUqIHJvb3QsIGludCBudW1iZXIpCnsJCglpZihyb290LT5kYXRhPT1udW1iZXIpCgkJcmV0dXJuOwoJZWxzZSBpZihyb290LT5kYXRhPm51bWJlcikKCXsKCQlpZihyb290LT5sZWZ0IT1OVUxMKQoJCXsKCQkJQWRkTm9kZShyb290LT5sZWZ0LG51bWJlcik7CgkJfQoJCWVsc2UKCQl7CgkJCU5vZGUqIG5ld05vZGUgPSAoTm9kZSopbWFsbG9jKHNpemVvZihOb2RlKSk7CgkJCW5ld05vZGUtPmRhdGEgPSBudW1iZXI7CgkJCW5ld05vZGUtPmxlZnQgPSBOVUxMOwoJCQluZXdOb2RlLT5yaWdodD0gTlVMTDsKCQkJbmV3Tm9kZS0+bmV4dD0gTlVMTDsKCQkJcm9vdC0+bGVmdCA9IG5ld05vZGU7CgkJfQoJfQoJZWxzZSBpZihyb290LT5kYXRhPG51bWJlcikKCXsKCQlpZihyb290LT5yaWdodCE9TlVMTCkKCQl7CgkJCUFkZE5vZGUocm9vdC0+cmlnaHQsbnVtYmVyKTsKCQl9CgkJZWxzZQoJCXsKCQkJTm9kZSogbmV3Tm9kZSA9IChOb2RlKiltYWxsb2Moc2l6ZW9mKE5vZGUpKTsKCQkJbmV3Tm9kZS0+ZGF0YSA9IG51bWJlcjsKCQkJbmV3Tm9kZS0+bGVmdCA9IE5VTEw7CgkJCW5ld05vZGUtPnJpZ2h0PSBOVUxMOwoJCQluZXdOb2RlLT5uZXh0PSBOVUxMOwoJCQlyb290LT5yaWdodD0gbmV3Tm9kZTsKCQl9Cgl9Cn0KCnZvaWQgTWFya1NpYmxpbmcoTm9kZSogcm9vdCwgTm9kZSogZmlyc3RDaGlsZCkKewoJaWYocm9vdD09TlVMTHx8Zmlyc3RDaGlsZD09TlVMTCkKCQlyZXR1cm47CQoJTm9kZSAqbmV4dEZpcnN0Q2hpbGQgPSBOVUxMLCpyb290VGVtcCwqY3VyckNoaWxkOwoJY3VyckNoaWxkID0gZmlyc3RDaGlsZDsKCQoJcHJpbnRmKCJcbiVkXHQiLGN1cnJDaGlsZC0+ZGF0YSk7CglpZihyb290LT5yaWdodCE9TlVMTCkKCXsKCQljdXJyQ2hpbGQtPm5leHQgPSByb290LT5yaWdodDsKCQlpZihuZXh0Rmlyc3RDaGlsZD09TlVMTCYmY3VyckNoaWxkLT5sZWZ0IT1OVUxMKQoJCQluZXh0Rmlyc3RDaGlsZCA9IGN1cnJDaGlsZC0+bGVmdDsKCQllbHNlIGlmKG5leHRGaXJzdENoaWxkPT1OVUxMJiZjdXJyQ2hpbGQtPnJpZ2h0IT1OVUxMKQoJCQluZXh0Rmlyc3RDaGlsZCA9IGN1cnJDaGlsZC0+cmlnaHQ7CgkJY3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0OwoJCXByaW50ZigiJWRcdCIsY3VyckNoaWxkLT5kYXRhKTsKCX0KCglyb290VGVtcCA9IHJvb3QtPm5leHQ7CgkKCXdoaWxlKHJvb3RUZW1wIT1OVUxMKQoJewoJCWlmKHJvb3RUZW1wLT5sZWZ0IT1OVUxMKQoJCXsJCgkJCWN1cnJDaGlsZC0+bmV4dCA9IHJvb3RUZW1wLT5sZWZ0OwoJCQlpZihuZXh0Rmlyc3RDaGlsZD09TlVMTCYmY3VyckNoaWxkLT5sZWZ0IT1OVUxMKQoJCQkJbmV4dEZpcnN0Q2hpbGQgPSBjdXJyQ2hpbGQtPmxlZnQ7CgkJCWVsc2UgaWYobmV4dEZpcnN0Q2hpbGQ9PU5VTEwmJmN1cnJDaGlsZC0+cmlnaHQhPU5VTEwpCgkJCQluZXh0Rmlyc3RDaGlsZCA9IGN1cnJDaGlsZC0+cmlnaHQ7CgkJCWN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dDsKCQkJcHJpbnRmKCIlZFx0IixjdXJyQ2hpbGQtPmRhdGEpOwkKCQl9CgkJaWYocm9vdFRlbXAtPnJpZ2h0IT1OVUxMKQoJCXsJCgkJCWN1cnJDaGlsZC0+bmV4dCA9IHJvb3RUZW1wLT5yaWdodDsKCQkJaWYobmV4dEZpcnN0Q2hpbGQ9PU5VTEwmJmN1cnJDaGlsZC0+bGVmdCE9TlVMTCkKCQkJCW5leHRGaXJzdENoaWxkID0gY3VyckNoaWxkLT5sZWZ0OwoJCQllbHNlIGlmKG5leHRGaXJzdENoaWxkPT1OVUxMJiZjdXJyQ2hpbGQtPnJpZ2h0IT1OVUxMKQoJCQkJbmV4dEZpcnN0Q2hpbGQgPSBjdXJyQ2hpbGQtPnJpZ2h0OwoJCQljdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQ7CgkJCXByaW50ZigiJWRcdCIsY3VyckNoaWxkLT5kYXRhKTsJCgkJfQoJCXJvb3RUZW1wID0gcm9vdFRlbXAtPm5leHQ7Cgl9CglpZihuZXh0Rmlyc3RDaGlsZD09TlVMTCYmY3VyckNoaWxkLT5sZWZ0IT1OVUxMKQoJCW5leHRGaXJzdENoaWxkID0gY3VyckNoaWxkLT5sZWZ0OwoJZWxzZSBpZihuZXh0Rmlyc3RDaGlsZD09TlVMTCYmY3VyckNoaWxkLT5yaWdodCE9TlVMTCkKCQluZXh0Rmlyc3RDaGlsZCA9IGN1cnJDaGlsZC0+cmlnaHQ7CgkKCWN1cnJDaGlsZC0+bmV4dCA9IE5VTEw7CglNYXJrU2libGluZyhmaXJzdENoaWxkLG5leHRGaXJzdENoaWxkKTsKfQoKCmludCBtYWluKCkKewoJTm9kZSogcm9vdCA9IChOb2RlKiltYWxsb2Moc2l6ZW9mKE5vZGUpKTsKCXJvb3QtPmRhdGEgPSA0OwoJcm9vdC0+bGVmdCA9IE5VTEw7Cglyb290LT5yaWdodD0gTlVMTDsKCXJvb3QtPm5leHQ9IE5VTEw7CgoJQWRkTm9kZShyb290LDMpOwoJQWRkTm9kZShyb290LDcpOwoJQWRkTm9kZShyb290LDEpOwoJQWRkTm9kZShyb290LDIpOwoJQWRkTm9kZShyb290LDYpOwoJQWRkTm9kZShyb290LDkpOwoJQWRkTm9kZShyb290LDE3KTsKCUFkZE5vZGUocm9vdCwxMSk7CglBZGROb2RlKHJvb3QsMTApOwoJQWRkTm9kZShyb290LDMpOwoJQWRkTm9kZShyb290LDQpOwoJCglwcmludGYoIiVkL24iLHJvb3QtPmRhdGEpOwoJaWYocm9vdC0+bGVmdCE9TlVMTCkKCQlNYXJrU2libGluZyhyb290LHJvb3QtPmxlZnQpOwoJZWxzZQoJCU1hcmtTaWJsaW5nKHJvb3Qscm9vdC0+cmlnaHQpOwoKIAogIHJldHVybiAwOwp9