#include <bits/stdc++.h>
struct
Node {
int
data;
Node *left, *right, *parent;
};
Node* newNode(
int
item, Node* parent)
{
Node* temp =
new
Node;
temp->data = item;
temp->left = temp->right = NULL;
temp->parent = parent;
return
temp;
}
Node* findRightSibling(Node* node,
int
level)
{
if
(node == NULL || node->parent == NULL)
return
NULL;
while
(node->parent->right == node
|| (node->parent->right == NULL
&& node->parent->left == node)) {
if
(node->parent == NULL
|| node->parent->parent == NULL)
return
NULL;
node = node->parent;
level--;
}
node = node->parent->right;
if
(node == NULL)
return
NULL;
while
(level < 0) {
if
(node->left != NULL)
node = node->left;
else
if
(node->right != NULL)
node = node->right;
else
break
;
level++;
}
if
(level == 0)
return
node;
return
findRightSibling(node, level);
}
int
main()
{
Node* root = newNode(1, NULL);
root->left = newNode(2, root);
root->right = newNode(3, root);
root->left->left = newNode(4, root->left);
root->left->right = newNode(6, root->left);
root->left->left->left = newNode(7, root->left->left);
root->left->left->left->left = newNode(10, root->left->left->left);
root->left->right->right = newNode(9, root->left->right);
root->right->right = newNode(5, root->right);
root->right->right->right = newNode(8, root->right->right);
root->right->right->right->right = newNode(12, root->right->right->right);
Node* res = findRightSibling(root->left->left->left->left, 0);
if
(res == NULL)
printf
(
"No right sibling"
);
else
printf
(
"%d"
, res->data);
return
0;
}