九度 何海濤 二叉搜尋樹的後序遍歷序列

2021-09-09 00:04:13 字數 1012 閱讀 3097

題目描述:輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。

輸入:每個測試案例包括2行:

第一行為1個整數n(1<=n<=10000),表示陣列的長度。

第二行包含n個整數,表示這個陣列,陣列中的數的範圍是[0,100000000]。

輸出:對應每個測試案例,如果輸入陣列是某二叉搜尋樹的後序遍歷的結果輸出yes,否則輸出no。

樣例輸入:

7

5 7 6 9 11 10 8

47 4 6 5

樣例輸出:

yes

no由於bst的左半部分都小於根,右半部分都大於根,我們可以根據這條性質來判斷。後續遍歷的最後乙個是根,所以先找出根,然後找出右半部分就是連續大於根的部分,然後再去判斷左半部分有大於根的元素肯定就不符合了。然後遞迴判斷左子樹和右子樹。

p.s. 如果給的是一棵中序遍歷的bst呢?可能的解答就是先列舉根的位置列舉的同時判斷左半部分和右半部分時候是否符合bst的性質。

1 #include 2

using

namespace

std;34

bool check(int a, int beg, int

end)520

21for(int i = beg; i <= mid; i++)

22if (a[i] >root)

23return

false;24

25bool left =check(a, beg, mid);

26bool right = check(a, mid + 1, end - 1

);27

28return left &&right;29}

3031

intmain()

3246 }

九度oj 題目1367 二叉搜尋樹的後序遍歷序列

題目描述 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。輸入 每個測試案例包括2行 第一行為1個整數n 1 n 10000 表示陣列的長度。第二行包含n個整數,表示這個陣列,陣列中的數的範圍是 0,10000...

九度 題目1367 二叉搜尋樹的後序遍歷序列

時間限制 1 秒 記憶體限制 32 兆 特殊判題 否 提交 966 解決 496 題目描述 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。輸入 每個測試案例包括2行 第一行為1個整數n 1 n 10000 表...

二叉搜尋樹的後序遍歷

二叉搜尋樹的後序遍歷序列中,最後乙個值是根結點,前面比根節點小的是左結點,後面比根結點大的是右結點。include include bool verifysquenceofbst int sequence,int length int root sequence length 1 int i 0 在...