二叉搜索树的后序遍历序列

题目描述

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

https://www.nowcoder.com/practice/a861533d45854474ac791d90e447bafd

解题想法

分治递归思想:序列最后一个元素是根节点,而二叉搜索树的根节点左边的序列值比根小,右边的比根大。

根据这个特性,将序列分为两半,左边序列的值比根节点小,右边序列的值比根节点大。如果序列出现不满足上述要求的,说明不是后序遍历序列。

代码实现

public class Solution {
    public boolean VerifySquenceOfBST(int [] sequence) {
    	// 异常条件
        if (sequence == null || sequence.length == 0){
            return false;
        }
        return func(sequence,0,sequence.length-1);
    }
    
    public boolean func(int [] a,int start,int end){
		// 递归弹出条件
        if (start >= end){
            return true;
        }
        int i = start;
        // 先找到序列的分界点
       	for ( ; i<end; i++){
            if (a[i] > a[end]){
                break;
            }
        }
        // 分界点右边的序列应该比根节点大,否则返回false
        for (int j = i;j<end;j++){
            if (a[j] < a[end]){
                return false;
            }
        }
        // 
        return func(a,start,i-1) && func(a,i+1,end);
    }
}
发布了26 篇原创文章 · 获赞 7 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览