題目:輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。
思路:二叉搜尋樹的後序遍歷結果的特點:序列的最後為根節點,序列的前半部分為根節點的左子樹,所有元素小於根節點,後半部分為右子樹,所有元素大於根節點。因此解題步驟如下:
1)確定根節點
2) 從左往右遍歷序列,直到發現第乙個大於根節點的元素x。此元素之前為左子樹。
3)從元素x開始遍歷序列,如果在到達根節點之前發現有小於根節點的元素,則判定該序列不是二叉搜尋樹的後序遍歷結果,返回false。
4)若上步未返回false,則遞迴檢查左子樹序列和右子樹序列是否為二叉搜尋樹的後序遍歷結果。
**(已在牛客網ac):
public
boolean
verifysquenceofbst(int sequence)
private
boolean
verifysquenceofbst(int sequence, int lo, int hi)
//若右子樹中有小於根節點元素,則返回false
for(int i = rightbegin; i < hi; i++)
return verifysquenceofbst(sequence, lo, rightbegin-1) && verifysquenceofbst(sequence, rightbegin, hi-1);
}
面試題22 二叉搜尋樹的後序遍歷序列
分析 在後序遍歷得到的序列中,最後乙個數字是樹的根結點的值,陣列中前面的數字可分為兩個部分 第一部分是左子樹結點的值,它們都比根結點的值小,第二部分是右子樹結點的值,它們都比根結點的值大。include stdafx.h include using namespace std bool verify...
面試題24二叉搜尋樹的後序遍歷序列
面試題24 二叉搜尋樹的後序遍歷序列 1.輸入乙個整數的陣列,判斷該陣列是不是某棵二叉搜尋樹的後序遍歷序列。假設輸入的陣列的任意兩個數字互不相同。分析 例如輸入陣列,則返回true,因為這個序列可以找到這樣的一棵二叉搜尋樹滿足條件,而對於序列則找不到這樣的二叉搜尋樹。二叉搜尋樹的性質是,左子樹的節點...
面試題24 二叉搜尋樹的後序遍歷序列
題目 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷.示例 includeusing namespace std bool verifysquenceofbst int sequence,int length 在二叉搜尋樹中右子樹的結點大於根結點 int j i for j length ...