《劍指Offer》之“平衡二叉樹”
阿新 • • 發佈:2019-01-25
題目描述
輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。
程式碼實現
/**根據平衡二叉樹定義,任意節點左右子數高度不能相差超過1。
所以我們用遞迴在求高度的同時判斷樹是否平衡,
如果平衡則返回子樹高度給上一層,
如果不平衡則直接返回-1。最終返回值如果是-1,
則樹是不平衡的,如果不是-1,則樹是平衡的。*/
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
int cent = opooc(pRoot);
if(cent==-1 ){
return false;
}
return true;
}
int opooc(TreeNode* root){
if(root==nullptr){
return 0;
}
int left = opooc(root->left);
int right = opooc(root->right);
if(left == -1||right ==-1){
return -1;
}
if(abs(left - right) > 1 )
{
return -1;
}
return (left>right?left:right)+1;
}
};