数据结构题目,后续遍历

判断一个给定的数组,是不是二叉树的后续遍历结果的思想是:

给定数组,数组最后一个借点值,坑定是根节点的值,从数组第一个节点开始,比根节点小的值一定是左子树节点,比根节点大的值一定是右子树节点。接着递归判断左子树的状况,例如第一个测试用例。{5,7,6,9,11,10,8}根节点为8.   5,7,6 都是左子树节点, 9 11 10 都是右子树节点。接着递归判断


package Abc;
/**
 * 判断整数序列是不是二叉树的后续遍历结果
 * */
public class Bestfor {
	public static void main(String[] args){
		int[] array={9,6,9};
		if(isAfterResult(array,0,array.length-1)){
			System.out.println("此数组符合二叉树的后序遍历");
		}else{
			System.out.println("此数组不符合二叉树的后序遍历");
		}
	}
	//判断一个整数数组是不是二叉树的后序遍历结果,使用递归算法
	private static boolean isAfterResult(int[] array,int start,int stop){
		if(null == array){
			throw new NullPointerException();
		}
		//判断一下start 和stop是否月结
		if(start < 0 || start >array.length || stop <0 || stop >array.length || start >stop){
			throw new ArrayIndexOutOfBoundsException();
		}
		//判断的时候分为三种情况,第一种情况当数组的长度小于3
		//第二种情况当数组的长度等于3,判断数据的根节点,与头结点。
		//第三种情况。当数组的长度大于3的情况,进行递归
		int count= stop -start +1;
		if(count < 3){
			return true;
		}else if(count == 3){
			//等于3的情况,当根节点大于等于头结点,并且根节点小于等于第二个	元素		
			if(array[stop] >= array[start] && array[stop]<= array[start+1]){
				return true;
			}else{
				return false;
			}
		}else{
			//循环遍历数组
			int index=-1;
			for(int i=start;i<stop;i++){
				//如果第i个元素大于根节点的元素
				if(array[i]>=array[stop]){
					index=i;
					break;
				}
			}
			if(index == -1 || index ==0){
				return isAfterResult(array,start,stop-1);
			}else{
				return isAfterResult(array,start,index-1) && isAfterResult(array,index,stop-1);
			}
		}
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值