二叉搜索树的后序遍历序列
题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。例如输入{5,7,6,9,11,10,8}则输出true。
思路:二叉搜索树的特点是左子树的所有节点比根节点小,右子树的所有节点比根节点大,后续遍历最后一个节点是根节点,以题目中的输入为例,8为根节点,5、7、6均比8小,为左子树,9、11、10均比8大,为右子树。然后再分别对左右子树进行这种规律的判断,一旦发现不符合,则返回false,否则返回true。可以采用递归的方法。
public static boolean verify(List<Integer> list){
if(list.size()==0)
return true;
List<Integer> left=new ArrayList<Integer>();
List<Integer> right=new ArrayList<Integer>();
while(list.get(0)<list.get(list.size()-1)){
left.add(list.get(0));
list.remove(0);
}
while(list.get(0)>list.get(list.size()-1)){
right.add(list.get(0));
list.remove(0);
}
if(list.size()>1)
return false;
else
return verify(left)&&verify(right);
}