每日編程16之判斷數是否爲平衡二叉樹

平衡二叉樹的定義是,對於樹中的任一節點,其左右子樹高度差不超過1(即只可以爲-1,0,1三種情況)

這裏的樹的高度是指從葉子節點(高度爲0)算起的左右子樹最高的值+1。這裏也有遞歸的邏輯。

判斷一顆樹(樹的唯一標誌/入口是其root節點)是否平衡,就是比較其左右子樹的高度差是否小於1.。


現在的解決方案是,遞歸思想+樹的後續遍歷


遞歸需要對每一個節點都進行處理,

對於一般的節點,遞歸的邏輯是,

(1)獲得其左子樹的高度,獲得其右子樹的高度

(2)判斷左右子樹高度差是否小於1,若是則取max(左右子樹)+1作爲樹的高度,此次遞歸結束。若>1則說明樹不平衡,函數退出exit(0)

(3)遞歸的結束條件是,若樹爲NULL,則高度爲0,遞歸出棧。。


所以,綜上,遞歸的返回值應該是一個高度!


核心代碼:

int highTree(BTree root)
{
        if(!root)       return 0;
        int leftH = highTree(root->left);
        int rightH = highTree(root->right);
        if(abs(leftH-rightH)>1)
        {
                printf("non blance truee \n");
                exit(0);
        }
        return ((leftH > rightH)?leftH:rightH) +1; 這個函數同時也返回樹的高度,在求樹高度的同時,判斷該樹是否爲平衡二叉樹
}

OVER!!!









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