資料結構 平衡二叉樹的判斷

2022-08-05 17:27:21 字數 772 閱讀 6047

平衡二叉樹(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;

}

二叉樹深度和平衡二叉樹的判定

對於二叉樹的深度的求解,利用遞迴的方式求解很簡單 下面就來設計這個遞迴演算法 要求一個節點的高度,先求左子樹的高度,然後再求解右子樹的高度。...

平衡二叉樹的判斷

上一週回家了一趟,家裡很忙,一段時間都沒有貢獻了。對於平衡二叉樹的判斷,貌似劍指offer裡面也有,對樹的深度用遞迴的思想,為左右子樹加1即...

是否是平衡的二叉樹

在理解題意以後,我們需要先分解下問題。首先要先獲取節點高度,然後再再進行比對判斷,判斷每一個節點左右子樹的高度差的絕對值是否超過1。 我們需要了解如何遍歷二叉樹,這樣才能知道樹的高度。還要了解遞迴的思想可以讓 邏輯更加清晰。 type treenode struct func max a b int...