/*輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋的後續遍歷的結果,如果是返回true,否則返回false,
假設輸入的陣列的任意兩個數字互不相同
*//*二叉搜尋樹:若它的左子樹不空,則左子樹上所有結點的值都小於它的根結點的值,
若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值;它的左右子樹也分別為
二叉搜尋樹
*/#include using namespace std;
//判斷是不是二叉搜尋的後序遍歷序列
bool verifysequenceofbst(int sequence, int length)
//確定右子樹的結點數,在二叉搜尋樹中,右子樹的結點均小於根結點
int j = i;
for(; j < length - 1; ++j)
//判斷左子樹是不是二叉搜尋樹
bool left = true;
if(i > 0)//左子樹非空
left = verifysequenceofbst(sequence, i);
//判斷右子樹是不是二叉搜尋樹
bool right = true;
if(i < length - 1)//右子樹非空
right = verifysequenceofbst(sequence + i, length - 1 - i);
//返回左右子樹的判斷值之並以此判斷是不是二叉搜尋樹
return (left && right);
}//*****測試*******
//在測試案例引入陣列長度時,應單獨設立引數,不能直接帶入主函式
/*例如test(int sequence, bool expected)
這裡的len引數利用前乙個引數求得,不可以,只是為什麼?
*/void test(int sequence, int length, bool expected)
//*****測試案例*****
//輸入的是完全二叉樹
void test1()
; int len = sizeof(sequence) / sizeof(int);
test(sequence, len, true);
}//輸入的是只有左子樹結點
void test2()
; //int len = sizeof(sequence) / sizeof(int);
test(sequence, sizeof(sequence) / sizeof(int), true);
}//輸入的是只有右子樹結點
void test3()
; int len = sizeof(sequence) / sizeof(int);
test(sequence, len, true);
}//輸入的只有乙個結點
void test4()
; int len = sizeof(sequence) / sizeof(int);
test(sequence, len, true);
}//輸入的序列沒有對應的一棵二叉搜尋樹
void test5()
; int len = sizeof(sequence) / sizeof(int);
test(sequence, len, false);
}//特殊輸入,指向後序遍歷序列的指標為null指標
void test6()
//這是乙個錯誤的測試案例呼叫
/*void testerror(int sequence, bool expected)
void testtesterror()
; testerror(sequence, false);
}*/int main()
/*如果面試題是要求處理一棵二叉樹的遍歷序列,我們可以先找到二叉樹的根結點,再基於根結點把整棵樹的遍歷序列
拆分成左子樹對應的子串行和右子樹對應的子串行,接下來再遞迴地處理兩個子串行
*/
面試題24 二叉樹的後序遍歷序列
題目 輸入乙個整數陣列,判斷該陣列是不是二叉搜尋樹的後序遍歷結果。如果是則返回true,否則返回false。假設輸入的陣列的任意兩個數字都互不相同 判斷序列是否是二叉樹後序遍歷結果 param arr param low param high return public boolean verify...
面試題24二叉搜尋樹的後序遍歷序列
面試題24 二叉搜尋樹的後序遍歷序列 1.輸入乙個整數的陣列,判斷該陣列是不是某棵二叉搜尋樹的後序遍歷序列。假設輸入的陣列的任意兩個數字互不相同。分析 例如輸入陣列,則返回true,因為這個序列可以找到這樣的一棵二叉搜尋樹滿足條件,而對於序列則找不到這樣的二叉搜尋樹。二叉搜尋樹的性質是,左子樹的節點...
面試題24 二叉搜尋樹的後序遍歷序列
題目 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷.示例 includeusing namespace std bool verifysquenceofbst int sequence,int length 在二叉搜尋樹中右子樹的結點大於根結點 int j i for j length ...