[LeetCode] Balanced Binary Tree

Given a binary tree, determine if it is height-balanced.

For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.

Hide Tags
 Tree Depth-first Search
 
思路:平衡二叉树就是和数的高度有关系,例外,如果有不是平衡二叉树的子树,那么返回-1,表示其不是平衡二叉树
/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
    public:
        bool isBalanced(TreeNode *root)
        {   
            if(root == NULL)
                return true;
            return treeHeight(root ) >= 0;
        }   

        int treeHeight(TreeNode * root)
        {   
            if(root == NULL)
                return 0;
            int lHeight = treeHeight(root->left); 
            int rHeight = treeHeight(root->right); 
            if(lHeight < 0 || rHeight < 0)
                return -1; 
            if( abs(lHeight - rHeight) <= 1)
                return max(lHeight, rHeight) + 1;
            return -1; 
        }   
};
class Solution {
public:
    bool checkBalance(TreeNode *node, int &dep)
    {
        if (node == NULL)
        {
            dep = 0;
            return true;
        }
        
        int leftDep, rightDep;
        bool leftBalance = checkBalance(node->left, leftDep);
        bool rightBalance = checkBalance(node->right, rightDep);
        
        dep = max(leftDep, rightDep)+1;
        
        return leftBalance && rightBalance && (abs(rightDep - leftDep) <= 1);
    }
    
    bool isBalanced(TreeNode *root) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        int dep;
        return checkBalance(root, dep);
    }
};
 
原文地址:https://www.cnblogs.com/diegodu/p/4410136.html