cc150:判斷一棵樹是否爲平衡樹

        判斷一棵樹是否平衡,需要注意的是和判斷一棵樹是否爲平衡二叉樹的區別。 平衡二叉樹的定義爲:它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1, 並且左右兩個子樹都是一 棵平衡二叉樹。 此時指的是這棵樹任意兩個葉子結點到根結點的距離之差不大於1。

節點定義爲:

struct Node{
    int key;
    Node *lchild, *rchild, *parent;
};

只需要求出離根結點最近和最遠的葉子結點,然後看它們到根結點的距離之差是否大於1即可。

void getDepth(Node *head){
    if(head == NULL) return;
    ++d;
    getDepth(head->lchild);
    if(head->lchild == NULL && head->rchild == NULL)
        dep[num++] = d;
    getDepth(head->rchild);
    --d;
}

求出所有葉子結點到根結點的距離後,再求出其中的最大值和最小值, 然後作差與1比較即可。此外,空樹認爲是平衡的。代碼如下:

bool isBalance(Node *head){
    if(head == NULL) return true;
    getDepth(head);
    int max = dep[0], min = dep[0];
    for(int i=0; i<num; ++i){
        if(dep[i]>max) max = dep[i];
        if(dep[i]<min) min = dep[i];
    }
    if(max-min > 1) return false;
    else return true;
}


發佈了164 篇原創文章 · 獲贊 18 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章