面試題24 二叉樹的後序遍歷序列

2021-06-17 00:45:02 字數 2015 閱讀 2179

/*輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋的後續遍歷的結果,如果是返回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 ...