&LeetCode0110& 平衡二叉樹

題目

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

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

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

示例 1:

給定二叉樹 [3,9,20,null,null,15,7]
3
/
9 20
/
15 7
返回 true 。

示例 2:

給定二叉樹 [1,2,2,3,3,null,null,4,4]
1
/
2 2
/
3 3
/
4 4
返回 false 。

來源:力扣(LeetCode

思路

對於每一個節點,我們通過自定義函數Depth遞歸獲得左右子樹的深度,如果子樹是平衡的,則返回真實的深度,若不平衡,直接返回-1,此方法時間複雜度O(N),空間複雜度O(N)。

C++代碼

class Solution {
public:
    bool isBalanced(TreeNode* root) 
    {
        if (Depth(root) == -1)
            return false;
        else
            return true;
    }

    int Depth(TreeNode *root)
    {
        if (!root)
            return 0;

        int left = Depth(root -> left);
        if (left == -1)
            return -1;

        int right =Depth(root -> right);
        if (right == -1)
            return -1;

        int diff = abs(left - right);
        if (diff > 1)
            return -1;
        else 
            return 1 + max(left, right);
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章