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

题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出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]);
	        
	    }
发布了213 篇原创文章 · 获赞 22 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/weixin_43113679/article/details/99978119
今日推荐