#include <bits/stdc++.h>
using
namespace
std;
struct
Tree {
int
data;
struct
Tree *left, *right;
};
struct
Tree* newNode(
int
data)
{
struct
Tree* node = (
struct
Tree*)
malloc
(
sizeof
(
struct
Tree));
node->data = data;
node->left = node->right = NULL;
return
(node);
};
int
SumOfCousin(
struct
Tree* root,
int
p,
int
level1,
int
level)
{
int
sum = 0;
if
(root == NULL)
return
0;
if
(p == root->data)
return
0;
if
(level1 == level)
return
root->data;
else
sum += SumOfCousin(root->left, p, level1 + 1, level) + SumOfCousin(root->right, p, level1 + 1, level);
return
sum;
}
int
ParentNode(
struct
Tree* root,
int
NodeData)
{
int
parent = -1;
while
(root != NULL) {
if
(NodeData == root->data)
break
;
else
if
(NodeData < root->data) {
parent = root->data;
root = root->left;
}
else
{
parent = root->data;
root = root->right;
}
}
if
(root == NULL)
return
-1;
else
return
parent;
}
int
LevelOfNode(
struct
Tree* root,
int
NodeData)
{
int
level = 0;
while
(root != NULL) {
if
(NodeData == root->data)
break
;
if
(NodeData < root->data) {
root = root->left;
}
else
{
root = root->right;
}
level++;
}
return
level;
}
int
main()
{
struct
Tree* root = NULL;
root = newNode(15);
root->left = newNode(13);
root->left->left = newNode(12);
root->left->right = newNode(14);
root->right = newNode(20);
root->right->left = newNode(18);
root->right->right = newNode(22);
int
NodeData = 12;
int
p, level, sum;
p = ParentNode(root, NodeData);
if
(p == -1)
cout <<
"-1\n"
;
else
{
level = LevelOfNode(root, NodeData);
sum = SumOfCousin(root, p, 0, level);
cout << sum;
}
return
0;
}