#include <bits/stdc++.h>
using
namespace
std;
struct
node {
int
key;
struct
node *left, *right;
};
node* newNode(
int
item)
{
node* temp =
new
node();
temp->key = item;
temp->left = temp->right = NULL;
return
temp;
}
struct
node* insert(
struct
node* node,
int
key)
{
if
(node == NULL)
return
newNode(key);
if
(key < node->key)
node->left = insert(node->left, key);
else
if
(key > node->key)
node->right = insert(node->right, key);
return
node;
}
int
sizeOfTree(node* root)
{
if
(root == NULL) {
return
0;
}
int
left = sizeOfTree(root->left);
int
right = sizeOfTree(root->right);
return
(left + right + 1);
}
void
storeInorder(node* root,
int
inOrder[],
int
& index)
{
if
(root == NULL) {
return
;
}
storeInorder(root->left, inOrder, index);
inOrder[index++] = root->key;
storeInorder(root->right, inOrder, index);
}
int
countPairUtil(
int
inOrder[],
int
j,
int
k)
{
int
pair = 0;
for
(
int
x = 0; x < j; x++) {
for
(
int
y = x + 1; y <= j; y++) {
int
sum = inOrder[x] + inOrder[y];
if
(sum > k)
pair++;
}
}
return
pair;
}
int
countPair(node* root,
int
k)
{
int
numNode = sizeOfTree(root);
int
inOrder[numNode + 1];
int
index = 0;
storeInorder(root, inOrder, index);
return
countPairUtil(inOrder, index - 1, k);
}
int
main()
{
struct
node* root = NULL;
root = insert(root, 5);
insert(root, 3);
insert(root, 2);
insert(root, 4);
insert(root, 7);
insert(root, 6);
insert(root, 8);
int
k = 11;
cout << countPair(root, k);
return
0;
}