平衡二叉樹(balanced binary tree)具有以下性質:它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。判斷一棵樹是否為平衡二叉樹我們用遞迴方法實現。
首先考錄特殊情況,如果樹為空則是平衡二叉樹,否則判斷它的左子樹是不是平衡二叉樹,如果是在判斷右子樹是不是平衡二叉樹,判斷的同時記錄左右子樹的高度,最後判斷該樹是否為平衡二叉樹
1 如果為空樹,返回真
2 遞迴判斷左子樹是否為平衡二叉樹,同時記錄左子樹高度lheight
3 遞迴判斷右子樹是否為平衡二叉樹,同時記錄右子樹高度rheight
4 判斷此二叉樹是否為平衡二叉樹,即abs(lheight-rheigh)<2?如果是樹的高度height為左右子樹中較大者加上1(根高度為1)
5 否則返回假
**如下
bool binarytree::isbalancedbt(bintreenode*subtree,int& height)
bool l = isbalancedbt(subtree->leftchild, lh); //遞迴判斷左子樹是否為平衡二叉樹
bool r = isbalancedbt(subtree->rightchild, rh); //遞迴判斷右子樹是否為平衡二叉樹
if (l&&r)//如果左子樹和右子樹為平衡二叉樹
}} return false;
}
資料結構 平衡二叉樹
1 空樹是平衡二叉樹。2 如果一棵樹不為空,並且其中所有的子樹都滿足各自的左子樹與右子樹的高度差都不超過 1。下面介紹乙個簡單應用,平衡二叉樹的相關操作以後補充。給定一顆二叉樹的頭結點 head,判斷一棵樹是否是平衡二叉樹。1.1 左子樹是否為平衡二叉樹 1.2 記錄左子樹的深度,最深到達哪一層,記...
平衡二叉樹 資料結構實驗之查詢二 平衡二叉樹
剛開始接觸平衡二叉樹,沒有什麼太多要分析的。部落格裡有很多大佬們都寫的很好。平衡二叉樹就是每個節點的子樹的高度差不超過1的二叉樹。可以快速搜尋數值的一種演算法,最糟的情況就是一直找到底,但也是log n 的。還是快很多。include include include define max a b a...
資料結構 二叉樹 2 平衡二叉樹 3
前面分析了平衡二叉樹是怎麼調整平衡的,這裡就來解決另乙個問題,平衡二叉樹理論為什麼能成立?難道就不會有怎麼調都不會平衡的情況嗎?一起 一下吧。我在很早的時候就注意到了乙個問題。上圖中是一顆不平衡的二叉樹向平衡調整的一部分過程,這個過程中我發現,子樹a,b,c,d的左右關係始終都是不變的,就是從左到右...