JZ23-二叉搜索树的后序遍历
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
解题思路:
- 不要想得太复杂,只要左边比头结点小,右边比头结点大就可以画出符合的二叉搜索树
- 后续遍历最后一个一定是头结点
- 先循环到比头结点小的最后那个点
- 再循环到比头结点大的最后那个点
- 判断最后那个点是否和头节点相等
没必要递归判断左右子树,只要符合上述条件就可以画出相应的二叉搜索树。
/**
* @author 枫叶火火
*题目:
*输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。
*如果是则输出Yes,否则输出No。
*假设输入的数组的任意两个数字都互不相同。
*/
public boolean VerifySquenceOfBST(int [] sequence) {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence == null || sequence.length == 0)
return false;
int root = sequence[sequence.length-1];
int i = 0;
while (sequence[i++]<root);
i--;
while (sequence[i++]>root);
i--;
if(sequence[i]==root)
return true;
return false;
}
public static void main(String[] args) {
Solution solution = new Solution();
System.out.println(solution.VerifySquenceOfBST(new int[] {1,2,3,4,5})); //true
System.out.println(solution.VerifySquenceOfBST(new int[] {1,3,2,6,5,7,4})); //true
System.out.println(solution.VerifySquenceOfBST(new int[] {1,3,6,2,5,7,4})); //false
}
}