1. 程式人生 > >(二叉樹)高度平衡二叉樹的判定

(二叉樹)高度平衡二叉樹的判定

題目描述

給定一個二叉樹,判斷它是否是高度平衡的二叉樹。

本題中,一棵高度平衡二叉樹定義為:

一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1。

題目分析

由題意可知,高度平衡二叉樹是指樹上每個結點的左右兩個子樹的高度差的絕對值都不超過1。那麼就可以採取以下思路:首先遞迴每個結點,然後對每個結點而言,得出其左右子樹的高度,比較二者高度差絕對值是否超過1,如果沒有超過1,說明當前結點是符合要求的,那麼就遞迴其左右子樹分別進行高度差判斷;如果超過1了,說明當前結點不符合要求,那麼整棵樹也就不符合要求,直接返回false。
具體實現程式碼如下:

bool isBalanced(TreeNode* root) {
        
        if(!root)return true;
        
        int dif=getTheHigh(root->left)-getTheHigh(root->right);   //計算高度差
        
        if(dif>=-1&&dif<=1)  //高度差絕對值小於1
            return isBalanced(root->left)&&isBalanced(root->right);  //遞迴其左右子樹
        
        return false;   //高度差絕對值大於1,不符合要求
        
    }
    int getTheHigh(TreeNode* root)  // 計算結點高度
    {
        if(!root)return 0;  //空結點高度為0
        
        return max(getTheHigh(root->left),getTheHigh(root->right))+1;  //返回其左右子樹高度中的較大值 再加1
    }