问题概述:如何快速判断是否平衡二叉树?
解决方法:中序遍历+剪枝
1.用-1标记非平衡二叉树。遍历左子树,若发现子树为非平衡二叉树,返回-1,则不用遍历右子树,右子树同理。
2.若左右子树都符合平衡二叉树,则比较两者深度,不符合返回-1;
代码:
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    bool isBalanced(TreeNode* root) {
        return dfs(root) == -1 ? false : true;
    }
    int dfs(TreeNode* root){
        if(root == NULL) return 0;
        int left = dfs(root -> left);
        if(left == -1) return -1;
        int right = dfs(root -> right);
        if(right == -1) return -1;
        return abs(left - right) < 2 ? max(left, right) + 1 : -1;
    }
};









