JZ23二叉搜索树的后序遍历的简单解题思路

剑指offer-JZ23二叉搜索树的后序遍历

题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

解题思路:

  1. 不要想得太复杂,只要左边比头结点小,右边比头结点大就可以画出符合的二叉搜索树
  2. 后续遍历最后一个一定是头结点
  3. 先循环到比头结点小的最后那个点
  4. 再循环到比头结点大的最后那个点
  5. 判断最后那个点是否和头节点相等

个人看法:我看牛客网上的解题思路中都递归判断左右子树,有必要判断左右子树吗?

二叉搜索树就是左孩子以及所有孩子节点比父节点小,右孩子以及所有孩子节点比父节点大。

/**
 * @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
	}
}
posted @ 2020-08-09 18:32  枫叶火火  阅读(128)  评论(0)    收藏  举报