[劍指offer] 二叉搜尋樹的後序遍歷序列
題目描述
輸入一個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的陣列的任意兩個數字都互不相同。
解題思路
二叉搜尋樹: 左子樹<根<=右子樹
對於後序遍歷來說,序列陣列的最後一個元素一定是根節點, 根據這個元素,將前面的陣列分為左、右兩個部分,左側部分都比該元素小,右側部分都比該元素大,如果右側部分有比該根節點小的元素,那麼就不是後序遍歷,如此遞迴進行。
參考程式碼
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence.length == 0)
return false;
if(sequence.length == 1)
return true;
return judge(sequence, 0, sequence.length-1);
}
public boolean judge(int [] sequence, int start, int root){
if(start >= root)
return true;
int i = start;
while(i < root && sequence[i] < sequence[root])
i++;
for(int j=i; j<root; j++){
if(sequence[j]<sequence[root])
return false;
}
return (judge(sequence, start, i-1)) && (judge(sequence, i, root-1));
}
}
相關文章
- 劍指 Offer 33. 二叉搜尋樹的後序遍歷序列
- 二叉搜尋樹的後序遍歷序列
- JZ-023-二叉搜尋樹的後序遍歷序列
- 判斷序列是否是二叉搜尋樹的後續遍歷
- The order of a Tree (二叉搜尋樹+先序遍歷)
- 劍指offer:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。二叉樹
- leetcode 102 劍指Offer 32 二叉樹的層次遍歷LeetCode二叉樹
- 二叉樹--後序遍歷二叉樹
- 從中序與後序遍歷序列構造二叉樹二叉樹
- PAT 1043 Is It a Binary Search Tree (25分) 由前序遍歷得到二叉搜尋樹的後序遍歷
- 根據前序遍歷序列、中序遍歷序列,重建二叉樹二叉樹
- 144.二叉樹的前序遍歷145.二叉樹的後序遍歷 94.二叉樹的中序遍歷二叉樹
- 二叉樹的先中後序遍歷二叉樹
- 二叉樹的先,中,後序遍歷二叉樹
- 二叉樹的前中後序遍歷二叉樹
- 劍指 Offer 54. 二叉搜尋樹的第k大節點 mark
- LeetCode-106-從中序與後序遍歷序列構造二叉樹LeetCode二叉樹
- 二叉樹的前序、中序、後序三種遍歷二叉樹
- 力扣 - 劍指 Offer 54. 二叉搜尋樹的第k大節點力扣
- 二叉樹中序和後序遍歷表示式二叉樹
- 劍指offer——重建二叉樹二叉樹
- 二叉樹的層序遍歷二叉樹
- 二叉樹的前序,中序,後序遍歷方法總結二叉樹
- 每日一題 - 劍指 Offer 54. 二叉搜尋樹的第k大節點每日一題
- 【模板題】- 145. 二叉樹的後序遍歷二叉樹
- 106. 從中序與後序遍歷序列構造二叉樹——Java實現二叉樹Java
- 二叉樹的四種遍歷方法:先序,中序,後序,層序二叉樹
- 劍指offer(四)重建二叉樹二叉樹
- 二叉樹的後序遍歷post order演算法二叉樹演算法
- python-二叉樹:前、中、後、層序遍歷Python二叉樹
- 根據二叉樹的前序遍歷和中序遍歷輸出二叉樹;二叉樹
- 劍指offer——二叉樹的映象C++二叉樹C++
- 【劍指offer】27. 二叉樹的映象二叉樹
- 劍指offer——二叉樹的深度C++二叉樹C++
- 劍指Offer-40-二叉樹的深度二叉樹
- 144. 二叉樹的遍歷「前序、中序、後序」 Golang實現二叉樹Golang
- 劍指 Offer 07. 重建二叉樹二叉樹
- 演算法 -- 實現二叉樹先序,中序和後序遍歷演算法二叉樹