1. 程式人生 > >劍指offer之平衡二叉樹

劍指offer之平衡二叉樹

1.題目描述

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

2.問題分析

什麼是平衡二叉樹?平衡二叉搜尋樹(Self-balancing binary searchtree)又被稱為AVL樹(有別於AVL演算法),且具有以下性質:它是一 棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。

根據平衡二叉樹的定義,我們可以知道,平衡二叉樹也是一個遞迴定義。我們可以借鑑二叉樹的深度來判斷是否是平衡二叉樹。
每次我們得到左右子樹高度的時候,都進行高度差判斷。如果有一個子樹不滿足要求,之後都返回一個標誌值,說明該樹不是平衡二叉樹。

3.原始碼

int getDeep(TreeNode* pRoot)
{
    if(pRoot == NULL)
        return 0;
    int left = getDeep(pRoot->left);
    //如果左樹非平衡二叉樹,直接返回結果
    if(left == -1)
        return -1;
    int right = getDeep(pRoot->right);
    //如果右樹非平衡二叉樹,直接返回結果
    if(right == -1)
        return -1;
    //判斷左右子樹是否滿足平衡二叉樹要求,不滿足就返回-1,反之返回平衡二叉樹高度   
return std::abs(left - right) > 1 ? -1 : max(left, right) + 1; } bool IsBalanced_Solution(TreeNode* pRoot) { //如果pRoot為空,因為返回值是0,所以也是平衡二叉樹 return getDeep(pRoot) != -1; }