/**
* @Author JH
* @CreateDate 18-6-9
* @Description
*/
public class VerifySquenceOfBST {
//方法一
public boolean VerifySquenceOfBST(int [] sequence) {
if (sequence==null||sequence.length==0)return false;
if (fun(sequence,0,sequence.length-1)!=null)return true;
return false;
}
public TreeNode fun(int []sequence,int st,int ed){
if (ed==-1)return null;//沒有右子樹了
if (st==ed)return new TreeNode(sequence[st]);
TreeNode root=new TreeNode(sequence[ed]);
for(int i=st;i<ed;i++){
if (sequence[i]<sequence[ed]);
else{//判斷右子樹的值是不是都大於根節點
for (int j=i+1;j<ed;j++){
if (sequence[j]<sequence[ed]){
return null;
}
}
root.left=fun(sequence,st,i-1);
root.right=fun(sequence,i,ed-1);
}
}
return root;
}
//方法二
public boolean VerifySquenceOfBST_1(int [] sequence ,int st ,int length) {
if (sequence==null||length<=0)return false;
int root=sequence[length-1];
int i=st;
//尋找左子樹的範圍(0,i-1)
for (;i<length;i++){
if (sequence[i]>=root){
break;
}
}
//驗證右子樹的數字是不是都大於根節點
for (int j=i+1;j<length;j++){
if (sequence[j]<root)return false;
}
//有右子樹
boolean left=true;
if (i>st){
left=VerifySquenceOfBST_1(sequence,st,i);
}
//有左子樹
boolean right=true;
if (i<length-1){
right=VerifySquenceOfBST_1(sequence,i,length-i-1);
}
return left&&right;
}
public static void main(String[] args) {
VerifySquenceOfBST v=new VerifySquenceOfBST();
int [] se={5,7,6,9,11,10,8};
int [] ss={4,8,6,12,16,14,10};
int s[]={5,4,3,2,1};
int[] a={7,4,6,5};
// System.out.println(v.VerifySquenceOfBST(se));
//System.out.println(v.VerifySquenceOfBST(ss));
//System.out.println(v.VerifySquenceOfBST(s));
System.out.println(v.VerifySquenceOfBST_1(s,0,s.length));
System.out.println(v.VerifySquenceOfBST_1(a,0,a.length));
}
}
判斷該數組是不是某二叉搜索樹的後序遍歷的結果
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.