java二叉搜尋樹的後序遍歷序列(思路與實現)

2021-08-20 22:03:03 字數 932 閱讀 5253

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

思路一:

使用的是非遞迴的思想,非遞迴也是乙個基於遞迴的思想,左子樹一定比右子樹小,因此去掉根後,數字分為left和right兩部分,right部分的最後乙個數字是右子樹的根,他也比左子樹所有的值都大,因此我們可以每次只看有子樹是否符合即可,即使到達了左子樹,也可以看出左右子樹還可以像之前那樣處理,

對於左子樹回到了原問題,對於右子樹,左子樹的所有值逗比右子樹的根小可以暫時吧他看成右子樹的左子樹字需要看看右子樹是否符合要求即可。

實現:

public boolean verifysquenceofbst(int  sequence) 

if(1 == size)

int i = 0;

while((--size) != 0)

while(sequence[i] > sequence[size])

if(i < size)

i = 0;

}return true;

}

思路二:

bst的後序序列的合法序列是,對於乙個序列s,最後乙個元素是x (也就是根),如果去掉最後乙個元素的序列為t,那麼t滿足:t可以分成兩段,前一段(左子樹)小於x,後一段(右子樹)大於x,且這兩段(子樹)都是合法的後序序列。完美的遞迴定義 : ) 。

實現:

public boolean verifysquenceofbst(int  sequence) 

public static boolean judge(int a, int l, int r)

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

輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷結果。如果是則返回 true,否則返回 false。假設輸入的陣列的任意兩個數字都互不相同。示例 輸入 1,6,3,2,5 輸出 false 輸入 1,3,2,6,5 輸出 true說明 二叉搜尋樹的後序遍歷序列的最後乙個節點是根節點,除去最後...

二叉搜尋樹的後序遍歷

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

二叉搜尋樹的後序遍歷

描述 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷。如果是,則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。1 樣例輸入 5 7 6 9 11 10 8 1 樣例輸出 yes 2 樣例輸入 7 4 6 5 2 樣例輸出 no 首先要知道二叉搜尋樹的定義 或者是一棵空樹...