題目
給定一個二叉樹,判斷它是否是高度平衡的二叉樹。
本題中,一棵高度平衡二叉樹定義爲:
一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1。
示例 1:
給定二叉樹 [3,9,20,null,null,15,7]
3
/
9 20
/
15 7
返回 true 。
示例 2:
給定二叉樹 [1,2,2,3,3,null,null,4,4]
1
/
2 2
/
3 3
/
4 4
返回 false 。
來源:力扣(LeetCode)
思路
對於每一個節點,我們通過自定義函數Depth遞歸獲得左右子樹的深度,如果子樹是平衡的,則返回真實的深度,若不平衡,直接返回-1,此方法時間複雜度O(N),空間複雜度O(N)。
C++代碼
class Solution {
public:
bool isBalanced(TreeNode* root)
{
if (Depth(root) == -1)
return false;
else
return true;
}
int Depth(TreeNode *root)
{
if (!root)
return 0;
int left = Depth(root -> left);
if (left == -1)
return -1;
int right =Depth(root -> right);
if (right == -1)
return -1;
int diff = abs(left - right);
if (diff > 1)
return -1;
else
return 1 + max(left, right);
}
};