判斷乙個陣列是不是排序二叉樹後序遍歷

2021-09-02 12:42:19 字數 897 閱讀 7907

碰到乙個題目,判斷乙個陣列是不是排序二叉樹的後序遍歷,所謂排序二叉樹,指的是對於二叉樹中的根節點比左子節點數值大,同時比右子節點數值小,例如[5,7,6,9,11,10,8] 就是乙個排序二叉樹的後序遍歷,而[7,10,8,9]則不是

解題思維:

既然是後序遍歷,則陣列最後乙個數值肯定是根節點,而從左到右,剩下陣列元素的左側值肯定小於根節點值,而其餘的陣列元素則大於根節點,例如[5,7,6,9,11,10,8]這個陣列,8肯定是根節點,而從陣列左側到5~6三個數比8小,肯定是左子樹,而剩下的9~10應該就是右子樹,右子樹應該滿足每個數字都比根節點大,如果滿足的話,我們再把[5,7,6]和[9,11,10]兩個部分的陣列元素重複進行之前的操作,知道結束

按照這個思路分析一下[7,10,8,9]為什麼不是,首先9為根節點,從陣列左側找到比8小的元素組,該元素組的最後乙個元素是7,因此,左子樹應該是7,而剩下的[10,8,9]應該是右子樹,右子樹應該滿足的條件是每個數字都比根節點9大,然而8比9小,所以不滿足

了解這點的話可以寫出如下程式

/*author:luchi

date:2015/10/21

*/ #includeusing namespace std;

//判斷函式

bool isvalidate(int a,int begin,int end)

int seperator=i;

//遞迴判斷左邊是不是滿足

bool isleftvalidate=(a,begin,seperator-1);

bool isrightvalidate=true;

//判斷右邊節點是不是比根節點大,如果不是的話,表示右邊不滿足,返回false

for(int j=seperator;j<=end-1;j++){

if(a[j]

判斷乙個二叉樹是不是平衡二叉樹

題目 輸入一棵二叉樹的根節點,判斷該樹是不是平衡二叉樹。分析 首先要明白平衡二叉樹的概念 平衡二叉樹必須滿足兩個條件 1 左右子樹的高度差不能大於1 2 每個根節點下面的左右子樹也必須滿足平衡二叉樹的性質。對於本題,我們首先要知道如何去求一棵二叉樹的深度,接下來我們只需要判斷每個節點是否滿足平衡二叉...

判斷乙個樹是不是平衡二叉樹

思路分析 樹的問題都可以考慮分治的思路。平衡二叉樹,就是要求左 右子數都是平衡的,而且高度差不超過 1 給定乙個二叉樹,確定它是高度平衡的。對於這個問題,一棵高度平衡的二叉樹的定義是 一棵二叉樹中每個節點的兩個子樹的深度相差不會超過1。樣例 給出二叉樹 a b a 3 b 3 9 20 20 15 ...

判斷二叉樹是不是平衡二叉樹

1.問題描述 輸入一棵二叉樹的根結點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意結點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。來自 劍指offer 2.分析 我們可以採用後續遍歷,在遍歷根結點之前就可以得到左右子樹的深度及是不是一顆平衡二叉樹。然後在根據左右子樹的深度差值來判斷這棵樹...