《剑指 offer》 学习23之二叉搜索树的后序遍历序列

题目描述

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

题目链接:牛客网

解题思路


public class Main {
    
	public static void main(String[] args) {
		int[] data = {4, 8, 6, 12, 16, 14, 10};
		System.out.println("true: " + verifySquenceOfBST(data));
		
		int[] data2 = {7, 4, 6, 5};
        System.out.println("false: " + verifySquenceOfBST(data2));
	}
	
	public static boolean verifySquenceOfBST(int[] sequence) {
        if (sequence == null || sequence.length == 0) {
            return false;
        }
        
        return verify(sequence,0,sequence.length - 1);
    }
    
    public static boolean verify(int[] sequence,int first,int last) {
	    if (last - first <= 1) {
	        return true;
	    } 
	    
	    int rootVal = sequence[last];
	    int cutIndex = first;
	    while (cutIndex < last && sequence[cutIndex] <= rootVal) {
	        cutIndex++;
	    }
	    
	    for (int i = cutIndex;i < last;i++) {
	        if (sequence[i] < rootVal) {
	            return false;
	        }
	    }
	    return verify(sequence,first,cutIndex - 1) && verify(sequence,cutIndex,last - 1);
	}
}

测试结果

image.png

猜你喜欢

转载自blog.csdn.net/duoduo_11011/article/details/107114249