1. 程式人生 > >23、二叉搜索樹的後序遍歷序列

23、二叉搜索樹的後序遍歷序列

數組 seq verify public 兩個 是不是 題目 enc 條件

一、題目

輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。

二、解法

 1 public class Solution {
 2 //非遞歸  
 3     //非遞歸也是一個基於遞歸的思想:
 4     //左子樹一定比右子樹小,因此去掉根後,數字分為left,right兩部分,right部分的
 5     //最後一個數字是右子樹的根他也比左子樹所有值大,因此我們可以每次只看有子樹是否符合條件
 6     //即可,即使到達了左子樹左子樹也可以看出由左右子樹組成的樹還想右子樹那樣處理 
 7     //對於左子樹回到了原問題,對於右子樹,左子樹的所有值都比右子樹的根小可以暫時把他看出右子樹的左子樹
8 //只需看看右子樹的右子樹是否符合要求即可 9 public boolean judge(int[] a, int start, int root){ 10 if(start >= root) 11 return true; 12 int i = root-1; 13 //從後面開始找 14 while(i>=start && a[i] > a[root]) 15 i--;//循環結束的條件是找到比根小的結點位置 16 //然後從前面開始判斷,從start到i應該比根小
17 for(int j= start; j <= i; j++) 18 if(a[j] > a[root]) 19 return false; 20 //然後遞歸判斷 21 return judge(a,start,i)&&judge(a,i+1,root-1); 22 } 23 public boolean VerifySquenceOfBST(int[] sequence) { 24 if(sequence.length == 0)
25 return false; 26 if(sequence.length == 1) 27 return true; 28 return judge(sequence,0,sequence.length-1); 29 } 30 31 }

23、二叉搜索樹的後序遍歷序列