劍指offer——平衡二叉樹
阿新 • • 發佈:2019-02-20
題目描述:
輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。
思路:
所謂平衡二叉樹就對某個結點來講,其左子樹的深度與右子樹深度的絕對值不超過1。由於需要對每個節點進行判斷,所以可以採用遞迴的思路進行解決。具體思路是:先求出根節點的左右子樹的深度,並對兩者進行判斷,如果沒有滿足左右子樹的深度的絕對值不超過1的條件,那麼就不是平衡二叉樹。下一步,自然就是分別對根節點的左右子樹進行遞迴判斷了,這樣一直到葉子結點。整棵二叉樹的所有節點都判斷完畢,所以這個問題就解決了。
程式碼實現:
public class Solution {
//每個結點的左右子樹深度都不超過1
public boolean IsBalanced_Solution(TreeNode root) {
if(root == null) return true;
int leftLen = TreeDepth(root.left);
int rightLen = TreeDepth(root.right);
int len = leftLen-rightLen;
if(len<-1||len>1) return false;
return IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right);
}
private int TreeDepth(TreeNode root){
if(root == null) return 0;
int leftLen = TreeDepth(root.left);
int rightLen = TreeDepth(root.right);
return leftLen > rightLen ? leftLen + 1 : rightLen + 1;
}
}