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

2021-08-03 02:34:07 字數 1960 閱讀 2024

題目:輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷.

**示例:

#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...