劍指Offer | 平衡二叉樹
阿新 • • 發佈:2019-02-13
一、題目
輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。
二、講解
(1)平衡二叉樹
平衡二叉樹(Balanced Binary Tree)又被稱為AVL樹(有別於AVL演算法),且具有以下性質:
- 它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,
- 並且左右兩個子樹都是一棵平衡二叉樹。
這個方案很好的解決了二叉查詢樹退化成連結串列的問題,把插入,查詢,刪除的時間複雜度最好情況和最壞情況都維持在O(logN)。但是頻繁旋轉會使插入和刪除犧牲掉O(logN)左右的時間,不過相對二叉查詢樹來說,時間上穩定了很多。
(2)
遞迴去判斷
三、程式碼
public class Solution {
public boolean IsBalanced_Solution(TreeNode root) {
if (root == null)
return true;
if (Math.abs(getHeight(root.left) - getHeight(root.right)) > 1)
return false;
return IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right);
}
public int getHeight(TreeNode root) {
if (root == null)
return 0;
return max(getHeight(root.left), getHeight(root.right)) + 1;
}
private int max(int a, int b) {
return (a > b) ? a : b;
}
}