1. 程式人生 > >劍指Offer | 平衡二叉樹

劍指Offer | 平衡二叉樹

一、題目

輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。

二、講解

(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; } }