/*
在后序遍历得到的序列中, 最后一个数字是树的根结点的值。数组中前面的数字可以分为两部分:
第一部分是左子树结点的值,它们都比根结点的值小: 第二部分是右子树结点的值,它们都比根结点的值大。
*/
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence.length==0)
return false;
return digui(sequence, 0, sequence.length-1);
}
public boolean digui(int[] sequence,int star,int end){
if(star>=end)
return true;
//先判断左边
int i = 0;
for(;i< end ; i++){
if(sequence[i] > sequence[end])
break;//判断直到左边大于根,这时候i的位置作为左子树的根,需要递归
}
//再判断右边
int j = i;
for(;j<end;j++){
if(sequence[j]<sequence[end])//如果有
return false;
}
//遍历
return digui(sequence,star,i-1) && digui(sequence, i, end-1);
}
}
在后序遍历得到的序列中, 最后一个数字是树的根结点的值。数组中前面的数字可以分为两部分:
第一部分是左子树结点的值,它们都比根结点的值小: 第二部分是右子树结点的值,它们都比根结点的值大。
*/
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence.length==0)
return false;
return digui(sequence, 0, sequence.length-1);
}
public boolean digui(int[] sequence,int star,int end){
if(star>=end)
return true;
//先判断左边
int i = 0;
for(;i< end ; i++){
if(sequence[i] > sequence[end])
break;//判断直到左边大于根,这时候i的位置作为左子树的根,需要递归
}
//再判断右边
int j = i;
for(;j<end;j++){
if(sequence[j]<sequence[end])//如果有
return false;
}
//遍历
return digui(sequence,star,i-1) && digui(sequence, i, end-1);
}
}