判定乙個組數是否是乙個搜尋二叉數的後序遍歷
對於乙個序列arr,最後乙個元素是arr[len] (也就是根root),如果去掉最後乙個元素的序列為t,那麼t滿足:t可以分成兩段,前一段(左子樹)小於root,後一段(右子樹)大於root,且這兩段(子樹)都是合法的後序序列。完美的遞迴定義 。
第一種方法:
bool ispostsort(int* arr,int left,int right)
// 5 7 6 9 11 10 8
int j = i - 1;
for (; j > 0;--j)//找比arr[right]=root小的數
return ispostsort(arr,left,j) && ispostsort(arr,i,right-1);
}
第二種方法;
bool ispostsort(int* arr, int n)
int j = i;
for (; j < n - 1; j++)
bool left = true;
if (i>0)
left = ispostsort(arr, i-1);
bool right = true;
if (j < n - 1)
return left&&right;
}
兩種方法思路相同,只是傳遞的引數不同。 給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹
給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 1 3 輸出 true 示例 2 輸入 5 1 4 3 6 輸出 false 解釋 ...
設計乙個演算法,判斷乙個二叉樹是否為完全二叉樹
思想 根據完全二叉樹的定義,對完全二叉樹按照從上到下 從左到右的層次遍歷,應該滿足一下兩條要求 某節點沒有左孩子,則一定無右孩子 若某節點缺左或右孩子,則其所有後繼一定無孩子 若不滿足上述任何一條,均不為完全二叉樹。演算法思路 採用層序遍歷演算法,用cm變數值表示迄今為止二叉樹為完全二叉樹 其初值為...
2 判斷乙個二叉樹是否是二叉搜尋樹(騰訊面試題)
1.面試的時候當面試官提出來的時候,我立馬想到的就是基於前序遍歷的遞迴方法。但是這個方法在面試官給說乙個測試用例的時候就徹底傻眼了。這是乙個典型的反例。這也可能是大家最容易忽略的乙個地方。謹記!2.我們利用當前節點是左子樹的最大值,是右子樹的最小值,採用基於前序遍歷的遞迴方式。public clas...