# Check if binary tree is height balanced or not

Written by

studymite

## Problem

A binary tree in which the left and right subtrees of every node differ in height by no more than 1 is called a height-balanced binary tree. Check if the given tree is height-balanced or not.

## Brute Force Approach

We calculate the height at every node and check if the tree is height-balanced or not.

TC – O(N2)

## Better Approach

We will keep track left and right height of the subtree in a variable at each node and if at any node the absolute difference of left and right height is greater than 1 we’ll return false.

#include<bits/stdc++.h>
using namespace std;
struct Node{
int data;
Node* left;
Node* right;
Node(int data){
this->data = data;
left = right = NULL;
}
};
int checkBalanced(Node* root, bool &result){
if(!root) return 0;
int lh = checkBalanced(root-&gt;left, result);
int rh = checkBalanced(root-&gt;right, result);

int currHeight = max(lh, rh) + 1;
int leftRightSubtreeHeightDiff = abs(lh - rh);

if(leftRightSubtreeHeightDiff &gt; 1) result = false;

if(!result) return 0;

return currHeight;

}
int main() {
/*
1
/
2      3
/   \   /
4     5 6    7
/
struct Node root = new Node(1);
root->left = new Node(2);
root->left->left = new Node(4);
root->left->right = new Node(5);
root->right = new Node(3);
root->right->left = new Node(6);
root->right->right = new Node(7);
bool result = true;
checkBalanced(root, result);
cout<<result;
return 0;
}

TC – O(N)