題目:輸入乙個整數陣列,判斷該陣列是不是二叉搜尋樹的後序遍歷結果。如果是則返回true,否則返回false。假設輸入的陣列的任意兩個數字都互不相同
/**
* 判斷序列是否是二叉樹後序遍歷結果
*@param arr
*@param low
*@param high
*@return
*/public
boolean
verifysquenceofbts(int arr, int low, int high)
//尋找切分點
int j = i <= high ? i-1 : low;
while(i < high)
boolean left = true;
boolean right = true;
if(j <= (i-1))
if(j < high)
return left && right;
}/**
* 預處理邊界問題
*@param arr
*@return
*/public
boolean
prepareverifysquenceofbts(int arr)
public
static
void
main(string args) ;
boolean result = new test().prepareverifysquenceofbts(a);
system.out.println(result);
}
總結:
在後序遍歷得到的序列中,最後乙個數字是樹的根結點的值。陣列中前面的數字可以分為兩部分:第一部分是左子樹結點的值,他們都比根結點的值小;第二部分是右子樹結點的值,它們都比根結點的值大。
舉一反三:
如果面試題是要求處理一顆二叉樹的遍歷序列,我們可以先找到二叉樹的根結點,再基於根結點把整棵樹的遍歷序列拆分成左子樹對應子串行和右子樹對應的子串行,接下來再遞迴地處理這兩個子串行。
面試題24 二叉樹的後序遍歷序列
輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋的後續遍歷的結果,如果是返回true,否則返回false,假設輸入的陣列的任意兩個數字互不相同 二叉搜尋樹 若它的左子樹不空,則左子樹上所有結點的值都小於它的根結點的值,若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 它的左右子樹也分別為 二...
面試題24二叉搜尋樹的後序遍歷序列
面試題24 二叉搜尋樹的後序遍歷序列 1.輸入乙個整數的陣列,判斷該陣列是不是某棵二叉搜尋樹的後序遍歷序列。假設輸入的陣列的任意兩個數字互不相同。分析 例如輸入陣列,則返回true,因為這個序列可以找到這樣的一棵二叉搜尋樹滿足條件,而對於序列則找不到這樣的二叉搜尋樹。二叉搜尋樹的性質是,左子樹的節點...
面試題24 二叉搜尋樹的後序遍歷序列
題目 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷.示例 includeusing namespace std bool verifysquenceofbst int sequence,int length 在二叉搜尋樹中右子樹的結點大於根結點 int j i for j length ...