劍指Offer——(39)平衡二叉樹

題目描述:

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

實現如下:

//如果二叉樹中的任意結點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹
//利用對二叉樹的後序遍歷,自底向上的判斷是否爲平衡二叉樹
//若某一結點不滿足條件,則此樹不是平衡二叉樹
//若某一結點滿足條件,就要計算此結點的深度,爲後面的計算做準備
class Solution 
{
public:
    bool IsBalanced(TreeNode* pRoot, int &depth)
    {
        if (pRoot == NULL)
        {
            depth = 0;
            return true;
        }
        int leftChildDepth = 0;//記錄當前結點的左子樹深度
        int rightChildDepth = 0;//記錄當前結點的右子樹深度
        //如果當前結點的左右子樹都滿足平衡時
        if (IsBalanced(pRoot->left, leftChildDepth) && IsBalanced(pRoot->right, rightChildDepth))
        {
            int high = leftChildDepth - rightChildDepth;//計算當前結點的左右高度差
            if (high >= -1 && high <= 1)//如果依舊平衡
            {
                depth = 1 + (leftChildDepth >= rightChildDepth ? leftChildDepth : rightChildDepth);//計算此結點的深度
                return true;
            }
        }
        return false;//此時此結點不滿足平衡條件
    }
    bool IsBalanced_Solution(TreeNode* pRoot) 
    {
        int depth = 0;//記錄每一個結點的深度
        return IsBalanced(pRoot, depth);//開始遞歸,進行後序遍歷
    }
};
發佈了107 篇原創文章 · 獲贊 36 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章