110. 平衡二叉樹
原題鏈接
給定一個二叉樹,判斷它是否是高度平衡的二叉樹。
本題中,一棵高度平衡二叉樹定義爲:
一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1。
示例 1:
給定二叉樹 [3,9,20,null,null,15,7]
3
/ \
9 20
/ \
15 7
返回 true 。
示例 2:
給定二叉樹 [1,2,2,3,3,null,null,4,4]
1
/ \
2 2
/ \
3 3
/ \
4 4
返回 false 。
要點
只需要在某個節點的時候,此時它的左子樹和右子樹高度差超過1那麼就不是一棵平衡二叉樹。
所以只要分別求出左右子樹的高度再判斷是不是高度差超過1。
解法
- 求出左子樹高度
lH
- 求出右子樹高度
rH
- 則不平衡。
代碼片段
public class Solution {
boolean balances = true; //1. 默認當前是一棵平衡二叉樹
public boolean isBalanced(TreeNode root) {
helper(root);
return balances; //2. 返回結果
}
public int helper(TreeNode root) {
if (root == null) {//3. 遞歸終止條件,節點爲null則沒有高度
return 0;
}
int leftH = helper(root.left) + 1;//4.當前左節點的高度爲左子樹高度+1
int rightH = helper(root.right) + 1;//5.當前右節點的高度爲右子樹高度+1
if (Math.abs(leftH - rightH) > 1) {//6.如果高度差超過1,修改成非平衡二叉樹直接返回。
balances = false;
return 0;
}
return Math.max(leftH, rightH);//7.計算當前高度
}
}
結尾
1.博客地址
2.源代碼倉庫
如果你在代碼裏看到了用 數字標記的註釋 如 //1.xxx 這是我寫代碼的順序,希望能給你一點啓發。