【剑指offer】二叉搜索树的后序遍历序列

【剑指offer】二叉搜索树的后序遍历序列

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

转载请注明出处:http://blog.csdn.net/ns_code/article/details/26092725


    剑指offer上的第24题,主要考察递归思想,九度OJ上AC。

题目描写叙述:

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

输入:

每一个測试案例包括2行:

第一行为1个整数n(1<=n<=10000),表示数组的长度。

第二行包括n个整数,表示这个数组,数组中的数的范围是[0,100000000]。

输出:

相应每一个測试案例,假设输入数组是某二叉搜索树的后序遍历的结果输出Yes,否则输出No。

例子输入:
7
5 7 6 9 11 10 8
4
7 4 6 5
例子输出:
Yes
No

    要紧紧抓住二叉搜索树的特点,对于后序遍历序列,其每一个子树的最后一个元素会比前面的左边一部分大,右边一部分小,这样便能够通过递归来推断。

    AC代码例如以下:

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>

bool IsBehSequenceBST(int *seq,int len)
{
	if(seq==NULL || len<1)
		return false;

	int root = seq[len-1];
	int i;
	for(i=0;i<len-1;i++)
		if(seq[i]>root)
			break;

	//第一个右子树元素的下标
	int RightStart = i;

	for(;i<len-1;i++)
		if(seq[i]<root)
			return false;
 
	bool left = true;
	if(RightStart > 0)
		left = IsBehSequenceBST(seq,RightStart);
	bool right = true;
	if(RightStart < len-1-RightStart)
		right = IsBehSequenceBST(seq+i,len-RightStart-1);

	return (left && right);

}

int main()
{
	int n;
	while(scanf("%d",&n) != EOF)
	{
		int *seq = (int *)malloc(n*sizeof(int));
		if(seq == NULL)
			exit(EXIT_FAILURE);

		int i;
		for(i=0;i<n;i++)
			scanf("%d",seq+i);
		if(IsBehSequenceBST(seq,n))
			printf("Yes\n");
		else
			printf("No\n");
	}
	return 0;
}

/**************************************************************
    
Problem: 1367
    
User: mmc_maodun
    
Language: C
    
Result: Accepted
    
Time:70 ms
    
Memory:1308 kb
****************************************************************/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118828.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Ffmpeg安装_linux离线安装ffmpeg

    Ffmpeg安装_linux离线安装ffmpeg目录安装包下载解压安装包配置环境变量总结安装包下载作为音视频处理重要软件ffmpeg,是一定要装好的。windows安装包下在链接:资源包地址解压安装包下载安装包后解压到需要的目录。配置环境变量找到控制面板->点击系统->点击高级系统设置->点击环境变量配置解压或文件夹路劲到Path变量中。一直确认后,点击win+r打开cmd。输入ffmpeg-i命令验证一下是..

    2022年9月13日
    2
  • 模拟对讲机和数字对讲机_对讲机行业现状

    模拟对讲机和数字对讲机_对讲机行业现状【对讲机的那点事】刷爆对讲机行业朋友圈的MC8618模块你了解吗?

    2022年4月20日
    49
  • 计算机无线键盘没反应,电脑连接无线键盘没反应怎么办

    计算机无线键盘没反应,电脑连接无线键盘没反应怎么办现在越来越多小伙伴使用无线键盘,没有线的束缚,操作起来比较灵活。可以离开电脑一点距离也能使用,所以深受大家的喜爱。使用时间久了,会出现一些故障问题,比如无线键盘没反应,怎么办?今天小编教大家来解决。方法一、我们要采用排除法,首选我们先做最基本的事情,就是换电池,而且以后我们遇到这个问题首先想到的就是会不会电池没电了导致没反应,所以换电池是排除法的第一个。如果换了电池还是不行,那么把无线键盘和接收器…

    2022年5月20日
    158
  • java如何打印数组的值,Java打印数组元素的值[通俗易懂]

    java如何打印数组的值,Java打印数组元素的值[通俗易懂]本篇文章帮大家学习java打印数组元素的值,包含了Java打印数组元素的值使用方法、操作技巧、实例演示和注意事项,有一定的学习价值,大家可以用来参考。以下实例演示了如何通过重载MainClass类的printArray方法输出不同类型(整型,双精度及字符型)的数组:publicclassMainClass{publicstaticvoidprintArray(Integer[…

    2022年4月29日
    111
  • docker入门实战笔记[通俗易懂]

    docker入门实战笔记

    2022年2月9日
    38
  • 备份数据库到本地

    备份数据库到本地

    2021年9月22日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号