#include <iostream>
#include <cmath>
using namespace std;
class BSTNode
{
public:
int data;
BSTNode *right,*left;
BSTNode()
{
left=0;
right=0;
}
BSTNode(const int &value , BSTNode * LEFT=0 ,BSTNode * RIGHT=0)
{
data=value;
left=LEFT;
right=RIGHT;
}
BSTNode * getleft()
{
return left;
}
BSTNode * getright()
{
return right;
}
int getvalue()
{
return data;
}
};
class BSTFCI
{
protected:
BSTNode * root;
public:
BSTFCI()
{
root=0;
}
void insertt ( const int &value)
{
BSTNode *itr= root;
BSTNode *prev=0;
while( itr !=0)
{
prev=itr;
if (itr->data < value)
itr=itr->right;
else
itr=itr->left;
}
if (root ==0)
root = new BSTNode (value);
else if (prev->data < value)
prev->right = new BSTNode(value);
else
prev->left = new BSTNode(value);
}
int getHeight(BSTNode *root)
{
if(root==NULL){return 0;}
return 1+ max(getHeight(root->left),getHeight(root->right));
}
bool isBalance( BSTNode* root)
{
if (root==0)
return true;
int hightDiff= getHeight(root->left) - getHeight(root->right);
if (abs(hightDiff)>1)
return false;
else
return isBalance(root->left) && isBalance(root->right);
}
};
int main()
{
BSTFCI sana;
sana.insertt(13);
sana.insertt(10);
sana.insertt(25);
sana.insertt(2);
sana.insertt(12);
sana.insertt(20);
sana.insertt(31);
BSTNode
sana.isBalance(sana);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgoKY2xhc3MgQlNUTm9kZQp7CgogICBwdWJsaWM6CiAgICBpbnQgZGF0YTsKICAgICBCU1ROb2RlICpyaWdodCwqbGVmdDsKCgpCU1ROb2RlKCkKewogICAgbGVmdD0wOwogICAgcmlnaHQ9MDsKCn0KCkJTVE5vZGUoY29uc3QgaW50ICZ2YWx1ZSAsIEJTVE5vZGUgKiBMRUZUPTAgLEJTVE5vZGUgKiBSSUdIVD0wKQp7CiAgICBkYXRhPXZhbHVlOwogICAgbGVmdD1MRUZUOwogICAgcmlnaHQ9UklHSFQ7Cn0KQlNUTm9kZSAqIGdldGxlZnQoKQp7CiAgICByZXR1cm4gbGVmdDsKfQpCU1ROb2RlICogZ2V0cmlnaHQoKQp7CiAgcmV0dXJuIHJpZ2h0Owp9CmludCBnZXR2YWx1ZSgpCnsKICAgIHJldHVybiBkYXRhOwp9Cgp9OwoKY2xhc3MgQlNURkNJCnsKcHJvdGVjdGVkOgogICAgQlNUTm9kZSAqIHJvb3Q7CgpwdWJsaWM6CkJTVEZDSSgpCnsKICAgIHJvb3Q9MDsKfQp2b2lkIGluc2VydHQgKCBjb25zdCBpbnQgJnZhbHVlKQp7CiAgICBCU1ROb2RlICppdHI9IHJvb3Q7CiAgICBCU1ROb2RlICpwcmV2PTA7CiAgICB3aGlsZSggaXRyICE9MCkKICAgIHsKICAgICAgICBwcmV2PWl0cjsKICAgICAgICBpZiAoaXRyLT5kYXRhIDwgdmFsdWUpCiAgICAgICAgICAgIGl0cj1pdHItPnJpZ2h0OwogICAgICAgIGVsc2UKICAgICAgICAgICAgaXRyPWl0ci0+bGVmdDsKICAgIH0KICAgIGlmIChyb290ID09MCkKICAgICByb290ID0gbmV3IEJTVE5vZGUgKHZhbHVlKTsKICAgIGVsc2UgaWYgKHByZXYtPmRhdGEgPCB2YWx1ZSkKICAgICAgIHByZXYtPnJpZ2h0ID0gbmV3IEJTVE5vZGUodmFsdWUpOwogICAgIGVsc2UKICAgICAgICBwcmV2LT5sZWZ0ID0gbmV3IEJTVE5vZGUodmFsdWUpOwoKfQppbnQgZ2V0SGVpZ2h0KEJTVE5vZGUgKnJvb3QpCnsKICAgIGlmKHJvb3Q9PU5VTEwpe3JldHVybiAwO30KCiAgICByZXR1cm4gMSsgbWF4KGdldEhlaWdodChyb290LT5sZWZ0KSxnZXRIZWlnaHQocm9vdC0+cmlnaHQpKTsKfQpib29sIGlzQmFsYW5jZSggQlNUTm9kZSogcm9vdCkKewogICAgaWYgKHJvb3Q9PTApCiAgICByZXR1cm4gdHJ1ZTsKICAgIGludCBoaWdodERpZmY9IGdldEhlaWdodChyb290LT5sZWZ0KSAtIGdldEhlaWdodChyb290LT5yaWdodCk7CiAgICBpZiAoYWJzKGhpZ2h0RGlmZik+MSkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICBlbHNlCiAgICAgICAgcmV0dXJuIGlzQmFsYW5jZShyb290LT5sZWZ0KSAmJiBpc0JhbGFuY2Uocm9vdC0+cmlnaHQpOwp9CgoKfTsKCgppbnQgbWFpbigpCnsKCgogICAgQlNURkNJIHNhbmE7CiAgICBzYW5hLmluc2VydHQoMTMpOwogICAgc2FuYS5pbnNlcnR0KDEwKTsKICAgIHNhbmEuaW5zZXJ0dCgyNSk7CiAgICBzYW5hLmluc2VydHQoMik7CiAgICBzYW5hLmluc2VydHQoMTIpOwogICAgc2FuYS5pbnNlcnR0KDIwKTsKICAgIHNhbmEuaW5zZXJ0dCgzMSk7CiAgIAogICBCU1ROb2RlIAogICAgc2FuYS5pc0JhbGFuY2Uoc2FuYSk7CgogICAgcmV0dXJuIDA7Cn0K