Balanced Binary Tree

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class treeInfo {
  public:
    int height;
    bool isBalanced;
    
    treeInfo(int h, bool b) {
        height = h;
        isBalanced = b;
    }
};

treeInfo getInfo(TreeNode *A) {
    if(!A) 
        return treeInfo(0, true);
        
    treeInfo left = getInfo(A->left);
    treeInfo right = getInfo(A->right);
    
    bool isBalanced = abs(left.height - right.height) <= 1;
    return treeInfo(max(left.height, right.height) + 1, isBalanced && left.isBalanced && right.isBalanced);
}
int Solution::isBalanced(TreeNode* A) {
    return getInfo(A).isBalanced;
}

Last updated