#include <bits/stdc++.h>
using
namespace
std;
struct
Node {
int
data;
struct
Node *left, *right;
};
Node* getNode(
int
n)
{
struct
Node* root =
new
Node;
root->data = n;
root->left = NULL;
root->right = NULL;
return
root;
}
int
sum(
struct
Node* root)
{
if
(root == NULL)
return
0;
return
root->data + sum(root->left) + sum(root->right);
}
int
adjSum(Node* root,
int
key)
{
int
parent = root->data;
while
(root != NULL) {
if
(key < root->data) {
parent = root->data;
root = root->left;
}
else
if
(root->data == key)
{
if
(root->left != NULL && root->right != NULL)
return
(parent + root->left->data +
root->right->data);
if
(root->left == NULL && root->right == NULL)
return
parent;
if
(root->left == NULL)
return
(parent + root->right->data);
if
(root->right == NULL)
return
(parent + root->left->data);
}
else
{
parent = root->data;
root = root->right;
}
}
return
0;
}
int
findTotalExceptKey(Node *root,
int
key)
{
return
sum(root) - adjSum(root, key);
}
int
main()
{
struct
Node* root = getNode(15);
root->left = getNode(13);
root->left->left = getNode(12);
root->left->left->left = getNode(11);
root->left->right = getNode(14);
root->right = getNode(20);
root->right->left = getNode(18);
root->right->right = getNode(24);
root->right->right->left = getNode(23);
root->right->right->right = getNode(25);
int
key = 20;
printf
(
"%d "
, findTotalExceptKey(root, key));
return
0;
}