平衡二叉树的定义:对于任一结点,其左右子树高度之差不大于1。
因此解决该问题自然而然就想到改写求二叉树的高度的算法。
如下为求二叉树高度的算法
public int getHeight(TreeNode root) {
if(root == null) {
return 0;
}
int leftHeight = getBlanceHeight(root.left);
int rightHeight = getBlanceHeight(root.right);
return Math.max(leftHeight, rightHeight) + 1;
}
现在我们需要新的返回值返回是否为平衡二叉树,但是计算高度函数已经占据了返回值。但是我们发现高度总是为正的,因此我们可以使用一个负数标记为非平衡二叉树。
具体实现代码如下:
public boolean isBalanced(TreeNode root) {
return getBlanceHeight(root) != -1;
}
/**
* 获取平衡二叉树的高度 若非平衡二叉树返回-1
* @return height or -1
*/
public int getBlanceHeight(TreeNode root) {
if(root == null) {
return 0;
}
int leftHeight = getBlanceHeight(root.left);
if(leftHeight == -1) {
return -1;
}
int rightHeight = getBlanceHeight(root.right);
if(rightHeight == -1) {
return -1;
}
return Math.abs(leftHeight - rightHeight) <= 1 ?
Math.max(leftHeight, rightHeight) + 1 : -1;
}