輸入乙個整數陣列,判斷該整數陣列是不是某二叉搜尋樹的後序遍歷的結果,如果是則返回true,否則返回false。假設輸入陣列的任意兩個數字都互不相同
在後序遍歷得到的序列中,最後乙個數字是樹的根結點的值。陣列中前面的數字可以分為兩部分:第一部分是左子樹結點的值,它們都比根結點的值小,第二部分是右子樹結點的值,它們都比根結點的值大。
bool verifysquenceofbst(int sequence, int
length)
//判斷作為右子樹陣列的值,是否都大於根結點
int j = i;
for (; j < length - 1; j++)
}//判斷左子樹是否為二叉搜尋樹
bool left = true;
if (i > 0)
//判斷右子樹是否為二叉搜尋樹
bool right = true;
if (i < length - 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(void)
24 二叉搜尋樹的後序遍歷序列
輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。c 1 class solution 89 bool verify vector sequence,int left int right 18for int i ...
24 後序遍歷二叉搜尋樹
題目描述 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結 果。如果是則輸出 yes,否則輸出 no。假設輸入的陣列的任意兩個數字都互不相 同。思路 先找到右子樹的開始位置,然後分別進行左右子樹遞迴處理。實現 public boolean verifysquenceofbst int s...
Q24 二叉搜尋樹的後序遍歷序列
q 輸入整數陣列,判斷該陣列是否為某二叉搜尋樹的後序遍歷結果。題目裡有幾個字眼要求我們熟知,第一就是二叉搜尋樹,第二個就是後序遍歷,第三就是它是樹。1 二叉搜尋樹 左孩子的值 根結點的值 右孩子的值 2 後序遍歷 左 右 根 3 樹 若一棵樹是滿足某一性質x的x樹,則其子樹若存在,則也定為滿足x性質...