剑指offer(Java实现) 二叉搜索树的后序遍历序列
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                剑指offer(Java实现) 二叉搜索树的后序遍历序列
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                題目描述
輸入一個整數數組,判斷該數組是不是某二叉搜索樹的后序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。
解題思路
先找到右子樹的開始位置,然后分別進行左右子樹遞歸處理。
(1)尋找右子樹的開始位置
? 在二叉搜索樹的后序遍歷結果中,最后一個元素為這棵樹的根節點;因此,將最后一個元素作為比較的標準值,將結果數組分為兩段,若后序遍歷結果正確,則比最后一個元素小的那一段連續數組則為該樹的左子樹,而比最后一個元素大的那一段連續數組則為該樹的右子樹。
? 因此,我們可以得到右子樹的開始位置,即出現的第一個比 最后一個元素 大的元素的位置。
(2)后半段數組的校驗
? 如果后半段數組中,有出現比 最后一個元素 大的元素,則該結果不是二叉搜索樹的后序遍歷結果,返回為 false。
(2)遞歸處理
? 遞歸處理,直到沒有出現 false,最終走到底,返回 true。
代碼實現
import java.util.Arrays;public class Solution {public boolean VerifySquenceOfBST(int [] sequence) {if (null == sequence || 0 == sequence.length) {return false;}int restart = 0;int length = sequence.length;for (int i = 0; i < length - 1; i++) {if (sequence[i] < sequence[length - 1]) {restart++;}}if (0 == restart) {VerifySquenceOfBST(Arrays.copyOfRange(sequence, 0, length - 1));} else {for (int i = restart; i < length - 1; i++) {if (sequence[i] <= sequence[length - 1]) {return false;}}VerifySquenceOfBST(Arrays.copyOfRange(sequence, 0, restart));VerifySquenceOfBST(Arrays.copyOfRange(sequence, restart, length - 1));}return true;} }總結
以上是生活随笔為你收集整理的剑指offer(Java实现) 二叉搜索树的后序遍历序列的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 剑指offer(Java实现) 从上往下
- 下一篇: 剑指offer(Java实现) 顺时针打
