判断数组是否是二叉搜索树的后序遍历序列

本文介绍了一种算法,用于判断给定的整数数组是否为某二叉搜索树的后序遍历结果。通过分析数组元素间的大小关系,将数组分为左右子树,递归验证其是否满足二叉搜索树的性质。

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

首先你要知道什么是二叉搜索树?
对于节点来说,根节点比左节点大,比右节点小,
后序序列代表着遍历顺序是左右根

这样就知道数组最后一个肯定是根节点,而可以用根节点把这个数组分割开,分成两部分,前部分都比根节点小,后部分都比根节点大,这样就满足二叉搜索树的后序遍历要求

而题也可以用这种规则来判定是否符合题意

//root是根节点,单独分出来了,这样好理解,前部分的下标,后半部分的下标,根节点
public boolean Ibst(int [] sequence,int left,int right,int root) {
		if(left>right) {
			return true;
		}
		int index=0;
		for(int i=left;i<=right;i++) {
			if(sequence[i]>root) {
				index = i;//这被切割成两部分
				for(int j=i+1;j<=right;j++) {
					if(sequence[j]<root) {  //如果后面部分有一个不满足的,就返回false
						return false;
					}
				}
			}
		}
		//这用的是&&,因为如果有一个部分不满足就不符合,
		return Ibst(sequence, left, index-1, sequence[index])&&Ibst(sequence, index, right-1, sequence[right]);
		
	}
	 public boolean VerifySquenceOfBST(int [] sequence) {
		 if(sequence==null||sequence.length<1) {
			 return false;
		 }		 
		return  Ibst(sequence, 0, sequence.length-2,sequence[sequence.length-1]);
	        
	    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值