平衡二叉樹的定義:對於任一結點,其左右子樹高度之差不大於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;
}