二叉搜尋樹的後序遍歷序列

2021-08-09 00:23:22 字數 1214 閱讀 5880

題目描述

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

思路:

容易想到的是還原這客二叉樹,再根據root節點和左右子樹的關係來判定是否為二叉搜尋樹。但只有後序遍歷是無法還原這棵樹的。

因此只能根據二叉樹的定義來判定:

root.left

.val

< root.val

< root.right

.val

root.left為二叉搜尋樹 && root.right為二叉搜尋樹

所以思路為:

1. 針對陣列arr[start~end],把arr[end]當做root節點,遍歷找到左右子樹的分界線

arr[i-1]arr[end];

2. 需要注意的是,arr陣列start~(i-1)之間的數小於arr[end],arr陣列i~(end-1)之間的數大於arr[end],否則return false;

3. 把左右子樹arr[start~(i-1)]和arr[i~(end-1)]分別考察是否為二叉搜尋樹

4. 最壞情形:該二叉搜尋樹所有節點只有左節點(或只有右節點),此時時間複雜度為o(n^2)。最好情形:該二叉搜尋樹所有葉子節點高度一致,此時時間複雜度為o(nlogn)。空間複雜度為o(1)

**如下:

/**

*@author mengjun li

*@create 2017/10/3

*@since 1.0.0

*/public

class

main ;//這是乙個二叉搜尋樹的後序遍歷

int arr1 = ;//這是乙個二叉搜尋樹的後序遍歷

system.out.println(isbst(arr));

system.out.println(isbst(arr1));

}public

static

boolean

isbst(int arr)

public

static

boolean

isbstcore(int arr, int start, int end)

輸出結果:

true

false

二叉搜尋樹的後序遍歷序列

題目 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是返回true,否則返回false。假設輸入的陣列的任意兩個數字都不相同。解答 二叉搜尋樹後序遍歷最後訪問的是根節點,根據根節點將陣列分成兩部分,前面一部分即左子樹值小於根節點值,後面一部分即右子樹的值大於根節點 再遞迴的檢查...

二叉搜尋樹的後序遍歷序列

輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。include using namespace std bool verifysquenceofbst int sequence,int length int j...

二叉搜尋樹的後序遍歷序列

輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。class solution 在二叉搜尋樹中右子樹的結點大於根結點 int j i for j0 left verifysquenceofbst lefttree...