平衡二叉树(后序递归遍历法-左右中)

73 阅读1分钟

力扣题目链接

一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。

public boolean isBalanced(TreeNode root) {
    return getHeight(root) == -1 ? false : true;
}
//得到root结点的高度
public int getHeight(TreeNode node) {
    //如何结点为null,说明高度为0
    if (node == null) {
        return 0;
    }
    //得到左节点的高度
    int leftHeight = getHeight(node.left);
    //node的左子树不是平衡二叉树
    if (leftHeight == -1) {
        return -1;
    }
    //得到右节点的高度
    int rightHeight = getHeight(node.right);
    //node的右子树不是平衡二叉树
    if (rightHeight == -1) {
        return -1;
    }
    //如果左右结点高度差大于1,说明该二叉树不是平衡二叉树
    if (Math.abs(leftHeight - rightHeight) > 1) {
        return -1;
    } else {
        //该node是平衡二叉树,返回该树的高度
        return Math.max(leftHeight, rightHeight) + 1;
    }
}