Oddbean new post about | logout
 



#include <iostream>
using namespace std;
//--------------------------------------------------------------------------------------------------
class node{
public:
    int value;
    node* left;
    node* right;
};
//--------------------------------------------------------------------------------------------------
node* createNode(int v){
    node* n = new node();
    n->value = v;
    n->left = NULL;
    n->right = NULL;
    return n;
}
//--------------------------------------------------------------------------------------------------
void insert(node* r, int value){
    if (r == NULL) {
        r = createNode(value);
    }
    else{
        if (value < r->value)
            insert(r->left, value);
        else
            insert(r->right, value);
    }
}
//--------------------------------------------------------------------------------------------------
void inorder(node* root){
    if (root != NULL) {
        inorder(root->left);
        cout << root->value << " ";
        inorder(root->right);
    }
}
//--------------------------------------------------------------------------------------------------
int maxValue(node* root, int v){
    int l = 0, r = 0;
    if (root != NULL) {
        l = maxValue(root->left,v);
        r = maxValue(root->right,v);
    }
    else {
        return 1;
    }
    return r > l ? r : l;
}
//--------------------------------------------------------------------------------------------------
int findHeight(node* root){
    if (root == NULL)
        return 0;
    return max(findHeight(root->left),findHeight(root->right)) + 1;
}
//--------------------------------------------------------------------------------------------------
bool isBalanced(node* r){
    int l = findHeight(r->left);
    int rght = findHeight(r->right);
    if (l < max(0,rght-1) && l > min(0,rght+1))
        return true;
    else
        return false;
}
//--------------------------------------------------------------------------------------------------
node* insertBalancedTree(node* r, int value){
    if (isBalanced(r)) {
        if (value < r->value)
            r->left = insertBalancedTree(r->left, value);
        else
            r->right = insertBalancedTree(r->right, value);
    }
    else{
        if (value < r->value)
            r->left = NULL;
        else
            r->right = NULL;
    }
    return r;
}
//--------------------------------------------------------------------------------------------------
void printInOrder(node* root){
    if (root != NULL) {
        printInOrder(root->left);
        cout << root->value << " ";
        printInOrder(root->right);
    }
}
//--------------------------------------------------------------------------------------------------
int main()
{
    node* r = createNode(10);
    insert(r,5);
    insert(r,15);
    insert(r,2);
    insert(r,7);
    insert(r,12);
    insert(r,18);
    printInOrder(r);

    cout << endl;
    cout << "Height of tree : " << findHeight(r) << endl;

    bool ans = isBalanced(r);
    cout << "Is tree balanced ? " << (ans==true?"Yes":"No") << endl;

    r = insertBalancedTree(r, 17);
    printInOrder(r);
    cout << endl;

    bool ans2 = isBalanced(r);
    cout << "Is tree balanced ? " << (ans2==true?"Yes":"No") << endl;


    return 0;
}