题目描述:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
解题思路:
首先要知道二叉搜索树的定义:其在二叉树的基础上,多了一个限制条件,所有的左子树都必须比父节点小,所有的右子树都必须比父节点大。
后序遍历的规律:
如上图,根节点在最后一位,前面是左子树,后面是右子树。其中左子树的值均小于最后一位,右子树的值均大于最后一位。
根据以上条件就可以判断一个序列是否是二叉搜索树的后序遍历,代码如下:
Java代码实现:
public boolean VerifySquenceOfBST(int [] sequence) {
int len = sequence.length;
if (len==0)
return false;
int index = 0;
for (; index<len-1; index++){//判断左子树的节点都小于根节点
if (sequence[index]>sequence[len-1])
break;
}
if (index != len-2){//判断右子树的节点都大于根节点
for (; index<len-1; index++){
if(sequence[index]<sequence[len-1])
return false;
}
}else//对应着根下面只有左子树的情况
return true;
return true;
}
END