力扣110题(平衡二叉树)

110、平衡二叉树

具体实现:

1.明确高度和深度

 求深度用前序遍历,高度用后序遍历

2.这道题比较高度用后序遍历

(1)确定递归的参数和返回值

参数:根节点

返回值:传入节点为根节点树的深度

如果当前传入节点为根节点的二叉树不是二叉平衡树了,就返回-1来标记已经不符合平衡树的规则

(2)确定终止条件

遇到空节点终止,返回0,表示当前节点为根节点的树高度为0

(3)确定单层递归的逻辑

左子树高度和右子树高度的差

<=1,返回当前二叉树的高度

否则返回-1

代码:

class Solution {
    public boolean isBalanced(TreeNode root) {
        return getHeight(root) != -1;
    }
    private int getHeight(TreeNode root){
        if (root == null) return 0;
        int leftHeight = getHeight(root.left);
        if (leftHeight == -1) return -1;
        int rightHeight = getHeight(root.right);
        if (rightHeight == -1) return -1;
        if (Math.abs(leftHeight-rightHeight) >1) return -1;
        return Math.max(leftHeight,rightHeight) + 1;
    }
}
原文地址:https://www.cnblogs.com/zhaojiayu/p/15530947.html