題目
輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。
思路
遞歸判斷左子樹有和又子樹的高度,絕對值不超過1.
參考代碼
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
if (!pRoot) return true;
return IsBalanced_Solution(pRoot->left) && IsBalanced_Solution(pRoot->right)
&& (abs(getHeight(pRoot->left) - getHeight(pRoot->right)) <= 1 );
}
private:
int getHeight(TreeNode* root) {
if (!root) return 0;
int left = getHeight(root->left);
int right = getHeight(root->right);
return left > right ? (left + 1) : (right + 1);
}
};
後話
關於平衡二叉樹是不是BST,這個好像一直都是有爭議的,這裏我採用的是在牛客網刷題的標準,在這個裏面是不考慮BST,只考慮高度平衡。如果想考慮BST的話,就多加一個判斷左子樹的最大值和右子樹的最小值吧。