二叉樹平衡的定義以下:任意一個結點,其兩顆子樹的高度差不超過1javascript
遞歸訪問每一個整棵樹,計算每一個結點子樹的高度java
[java] view plain copynode
但這樣作的效率不高,getHeight()會被反覆調用計算同一個結點的高度,時間複雜度爲O(N logN)app
getHeight()其實不只能夠檢查高度,還能檢查樹是否平衡,只要將判斷左右子樹高度差是否大於一放進getHeight()就能夠了,下面用checkHeight()來表示這一段代碼。spa
這樣作的好處是時間複雜度下降了,爲O(N),空間複雜度爲O(H),H爲樹的高度.net
[java] view plain copyblog
或者:遞歸
咱們用後序遍歷的方式遍歷二叉樹的每個結點,在遍歷到一個結點以前咱們已經遍歷了它的左右子樹。只要在遍歷每一個結點的時候記錄它的深度(某一結點的深度等於它到葉節點的路徑的長度),咱們就能夠一邊遍歷一邊判斷每一個結點是否是平衡的
ip
Java代碼get