每天一道算法题(5)——判断整数序列是否是二叉查找树后序遍历结果

本文介绍了如何通过递归方法判断一个整数数组是否符合二叉查找树的后序遍历特性,包括核心思路、程序实现及示例应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false

          例如 输入576911108     true
                 输入7465                      false


1.思路

    二叉查找树:左右子树均为二叉查找树,在此基础上,左子树的最大值(即最右节点)小于和右子树的最小值(即最左节点)大于根节点。

      1)使用递归。结束条件,仅有<=2个节点的序列一定是查找树。
      2)以小于根节点的第一个节点作为左子树的根节点,划分左右子树。递归判断子树是否为查找树。
      3)在此条件上,满足左子树最大值仍小于根节点值(步骤2中,保证右子树全部大于根节点,故右子树的最小值情况不用判断)

   


2.程序

bool verify(int *data,int length){//length为序列长度
    if(length<=2)
	     return true;
	else{
	     
		 bool left=false,right=false;
		
		 int j=length-2;
		 int* root=data+length-1;
		 for(;j>=0&&*(data+j)>*root;j--);
		 
		 left=verify(data,j+1);
		 right=verify(data+j+1,length-j-2);
		 
		 if(left&&right&&(j<=0||*(data+j-1)<*root))//左子树仅有1个点或者没有节点的情况,不用判断左子树的最小值
		      return true;
		 
	}
	return false;
}

  

   sizeof此时可用来判断数组的长度。
	int data[]={7,4,6,5};
	bool flag=verify(data,sizeof(data)/sizeof(int));


     


转载于:https://www.cnblogs.com/engineerLF/p/5393046.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值