題目描述:
輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。
分析:
完整代碼:
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
//聲明一個變量,表示高度
int pDepth = 0;
//調用函數判斷是否爲平衡子樹
return IsBalanced(pRoot, &pDepth);
}
private:
bool IsBalanced(TreeNode* pRoot, int* pDepth)
{
//如果當前節點爲空
if(pRoot == nullptr)
{
*pDepth = 0;
return true;
}
//聲明兩個變量 left ,right;表示左右子樹的高度
int left, right;
//遞歸調用函數判斷左右子樹是否爲平衡樹,並計算左右子樹的高度
if(IsBalanced(pRoot->left,&left) && IsBalanced(pRoot->right,&right))
{
//計算左右子樹的高度差
int value = left - right;
//如果高度差在[-1,1]
if(value <= 1&& value >= -1)
{
*pDepth = 1 + ((left > right)? left : right);
return true;
}
}
//如果左右都不爲平衡樹
return false;
}
};