平衡二叉樹

題目

輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。

思路

遞歸判斷左子樹有和又子樹的高度,絕對值不超過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的話,就多加一個判斷左子樹的最大值和右子樹的最小值吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章