題目:輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷.
**示例:
#includeusing namespace std;
bool verifysquenceofbst(int sequence, int length)
// 在二叉搜尋樹中右子樹的結點大於根結點
int j = i;
for (; j < length - 1; ++j)
// 判斷左子樹是不是二叉搜尋樹
bool left = true;
if (i > 0)
left = verifysquenceofbst(sequence, i);
// 判斷右子樹是不是二叉搜尋樹
bool right = true;
if (i < length - 1)
right = verifysquenceofbst(sequence + i, length - i - 1);
return (left && right);
}// ********************測試**********************
void test(char* testname, int sequence, int length, bool expected)
// 10
// / \
// 6 14
// /\ /\
// 4 8 12 16
void test1()
; test("test1", data, sizeof(data) / sizeof(int), true);
}// 5
// / \
// 4 7
// /
// 6
void test2()
; test("test2", data, sizeof(data) / sizeof(int), true);
}// 5
// /
// 4
// /
// 3
// /
// 2
// /
// 1
void test3()
; test("test3", data, sizeof(data) / sizeof(int), true);
}// 1
// \
// 2
// \
// 3
// \
// 4
// \
// 5
void test4()
; test("test4", data, sizeof(data) / sizeof(int), true);
}// 樹中只有1個結點
void test5()
; test("test5", data, sizeof(data) / sizeof(int), true);
}void test6()
; test("test6", data, sizeof(data) / sizeof(int), false);
}void test7()
; test("test7", data, sizeof(data) / sizeof(int), false);
}void test8()
int main()
面試題24二叉搜尋樹的後序遍歷序列
面試題24 二叉搜尋樹的後序遍歷序列 1.輸入乙個整數的陣列,判斷該陣列是不是某棵二叉搜尋樹的後序遍歷序列。假設輸入的陣列的任意兩個數字互不相同。分析 例如輸入陣列,則返回true,因為這個序列可以找到這樣的一棵二叉搜尋樹滿足條件,而對於序列則找不到這樣的二叉搜尋樹。二叉搜尋樹的性質是,左子樹的節點...
面試題24 二叉搜尋樹的後序遍歷序列
題目 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。假設輸入的陣列的任意兩個數字都互不相同。1 bool ispostorder vector num,int left,int right 211 判斷右子樹中的所有元素是否都大於根元素 12for int j i j right ...
面試題24 二叉搜尋樹的後序遍歷序列
題目 給定乙個整數陣列,判斷該陣列是不是某二叉搜尋的後續遍歷序列。假設輸入的陣列的任意兩個數字都互不相同。分析 對於某種訪問序列的verify的問題,一般先找到根節點,然後根據題目資訊找出左子樹與右子樹。然後根據當前資訊判斷當前根節點的合法性,然後遞迴判斷左子樹和右子樹的合法性。bool varif...