1. 程式人生 > >劍指offer——平衡二叉樹

劍指offer——平衡二叉樹

題目描述:

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

思路:

所謂平衡二叉樹就對某個結點來講,其左子樹的深度與右子樹深度的絕對值不超過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; } }