P1229 遍历问题

news2024/9/25 9:32:09

题目描述

我们都很熟悉二叉树的前序、中序、后序遍历,在数据结构中常提出这样的问题:已知一棵二叉树的前序和中序遍历,求它的后序遍历,相应的,已知一棵二叉树的后序遍历和中序遍历序列你也能求出它的前序遍历。然而给定一棵二叉树的前序和后序遍历,你却不能确定其中序遍历序列,考虑如下图中的几棵二叉树:

所有这些二叉树都有着相同的前序遍历和后序遍历,但中序遍历却不相同。

输入格式

输A数据共两行,第一行表示该二叉树的前序遍历结果s1,第二行表示该二叉树的后序遍历结果s2。

输出格式

输出可能的中序遍历序列的总数,结果不超过长整型数。

输入输出样例

输入 #1复制

abc                           
cba

输出 #1复制

4

说明/提示

无提示

1.我们可以了解到当一个节点只有单个的左孩子和右孩子的时候,前序遍历和后序遍历是一样的。

 

因为只有单个节点的话先序和后序是分不清中序的,因为先序遍历是   根左右,而后序是左右根,当只有单个节点就会变成   :

先序是:根左(或者右)1->2->4->5->3->6

后序是:左(或者右)根 4->5->2->6->3->1

如果有其他的节点,因为先序和后序左右子树是恰恰相反的,是可以确定的,所以只有当只有单个节点的时候,才会右多种可能性。下面打一个比方:

(1)在这里,我们可以先确定根,继而是左子树我们看的第一个出现在先序的不是左子树就会使右子树的根,如果是右子树的根那么出现在导数第二个的应该是2,而不是3,所以2会是左子树,那么我们可以知道3肯定是右子树。

(2)我们已经确立2是左子树,2是根,那么接下来在先序遍历顺序中,我们可以知道4和5是属于左子树的,因为到了3,3已经是右子树的根,先序遍历的特点是根左右,所以4 5 是它的下属节点,而我们结合后序遍历看,先是 4 再是 5 ,因为后序遍历是 左右根,所以4 5 是  2 的左右孩子,而不是4 和 5 当中还能有下属节点,如果 5 是 4 的节点那么先序就不会是 4->5 ,4 是 5的节点就更不可能了。

(3)我们已经确定了左子树,我们继而看右子树。我们知道 3 是右子树根节点。还剩下 6 这一个数字了,我们是无法确定 6 这个节点是左孩子还是右孩子的。所以他会有俩个可能性。 

那么如何变成代码?

我们遍历先序数组str1,和遍历后序数组str2

如果str1[i]==str2[j],就说明找到了一个节点相等,str1[i+1]==str2[j-1],这个是说明满足当前相等的节点只有一个节点的情况。因为先序遍历是 根左(右)而后序遍历是左(右)根,所以记录下来有几个这样的节点。

最后输出1<<c即可,为什么不使用pow,因为pow返回值是double,并不是很适合。你也可以在记录的同时,去*2是可以的。

C语言代码如下:

#include<stdio.h>
#include<string.h>
int main()
{
	char str1[300],str2[300];
	int i,j;
	long long s=1,c=0;
	scanf("%s%s",str1,str2);
	for(i=0;i<strlen(str1);i++)
	{
		for(j=1;j<strlen(str2);j++)
		{
			if(str1[i]==str2[j]&&str1[i+1]==str2[j-1])
				c++;	
		}
	}
	printf("%lld\n",s<<c);
}

C++代码如下:

#include <iostream>
#include <bits/stdc++.h>
#include <cstring>
using namespace std;

int main() 
{
	char str1[300], str2[300];
	int i, j;
	long long s = 1;
	cin >> str1 >> str2;

	for (i = 0; i < strlen(str1)-1; i++) 
	{
		for (j = 1; j < strlen(str2); j++) 
		{
			if (str1[i] == str2[j] && str1[i + 1] == str2[j - 1])
				s*=2;
		}
	}
	cout << s << endl;
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/140424.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人工智能知识图谱研究

1、研究背景及意义 随着互联网技术的发展以及大数据、人工智能等新科技时代的来临&#xff0c;我国高校教育改革、高校人才培养也面临着新的机遇与挑战。一方面&#xff0c;为了实现国家战略、支撑快速发展的新经济&#xff0c;需要高校变革发展培养新型人才&#xff0c;满足社…

Au 效果器详解:自适应降噪

Au菜单&#xff1a;效果/降噪/恢复/自适应降噪Adaptive Noise Reduction自适应降噪 Adaptive Noise Reduction可快速去除变化的宽频噪声&#xff0c;如背景声音、隆隆声、风声等。此效果实时起作用&#xff0c;并可在多轨编辑器中使用。相对于标准降噪效果&#xff0c;自适应降…

cc1-7分析-2

cc2 cc2和cc4呢其实区别也不是很大&#xff0c;最后的rce的方式也都是一样的。区别在哪呢&#xff0c;之前我们说过TemplatesImpl.newTransformer是可以直接进行rce的&#xff0c;cc2就是通过 InvokerTransformer直接去调用TemplatesImpl.newTransformer&#xff0c;不走Insta…

Kubernetes(3)- Serivce详解

第七章 Service详解 本章节主要介绍kubernetes的流量负载组件&#xff1a;Service和Ingress。 Service介绍 ​ 在kubernetes中&#xff0c;pod是应用程序的载体&#xff0c;我们可以通过pod的ip来访问应用程序&#xff0c;但是pod的ip地址不是固定的&#xff0c;这也就意味着…

【数据结构】带头双向循环链表的实现

目录 一、什么是带头双向循环链表 二、带头双向循环链表的实现 1、创建一个动态头结点 2、双向链表初始化 3、打印双向链表 4、双向链表尾插 5、双向链表尾删 6、双向链表头插 7、双向链表头删 8、双向链表查找 9、双向链表在pos的前面进行插入x 10、双向链表删除pos位置的结点…

植物大战僵尸:寻找葵花生产速度

通过CE修改器遍历出控制太阳花吐出阳光的时间变量&#xff0c;太阳花吐出阳光是由一个定时器控制的&#xff0c;首先我们找到第一个太阳花的基址与偏移&#xff0c;然后找出第二个太阳花的动态地址&#xff0c;并通过公式计算得到太阳花结构长度的相对偏移&#xff0c;最后我们…

C++ 大漠插件免注册调用

1&#xff1a; 参考文章&#xff1a; https://blog.csdn.net/chuhe163/article/details/1127455902&#xff1a; 免注册调用代码实现2.1 先建一个空的mfc项目2.2 拷贝dm.dll 到文件项目所在文件夹。2.2.1 拷贝到项目后&#xff0c;右键项目->添加 ->现有项 ->选择dm.d…

四、常用注解

文章目录四、常用注解1、TableName1.1 问题1.2 通过TableName解决问题1.3 通过全局配置解决问题2、TableId2.1 问题2.2 通过TableId解决问题2.3 TableId的value属性2.4 TableId的type属性2.5 雪花算法3、TableField3.1 情况13.2 情况24、TableLogic4.1 逻辑删除4.2 实现逻辑删除…

JavaScript 自执行函数防止冲突全局作用域变量 - 在线客服源码实现弹窗效果JavaScript SDK...

当我在实现在线客服源码弹窗效果JavaScript SDK时&#xff0c;对外公开的SDK代码就是使用的自执行函数的形式。 使用自执行函数来实现 JavaScript SDK 有以下好处&#xff1a; 封装代码&#xff1a;自执行函数可以将你的 JavaScript 代码封装起来&#xff0c;从而避免在全局作用…

文件字节输出流、文件拷贝、资源释放的2种方式

文件字节输出流&#xff1a;写字节数据到文件&#xff1a; API: 注意&#xff1a;close() 包含了 flush() ; 关闭后流就不可以继续使用了 写一个字节出去&#xff1a; 98表示一个字节 写一个字节数组&#xff1a; 注意&#xff1a;写数字和字母可以直接写出去&#xff0c;但…

【二分查找】有界数组中指定下标处的最大值

题目描述 给你三个正整数 n、index 和 maxSum 。你需要构造一个同时满足下述所有条件的数组 nums&#xff08;下标 从 0 开始 计数&#xff09;&#xff1a; nums.length nnums[i] 是 正整数 &#xff0c;其中 0 < i < nabs(nums[i] - nums[i1]) < 1 &#xff0c;其…

leetcode 2244. Minimum Rounds to Complete All Tasks(完成所有task至少要多少轮)

tasks数组里面的数字表示难度的等级&#xff0c;每一轮只能完成2 或者 3个同等级的task, 问至少需要多少轮能完成所有的task, 不能完成的返回-1. 思路&#xff1a; 先来看下什么情况下不能完成。 由于一轮只能完成2 或 3个&#xff0c;那如果该等级的task只有一个呢&#xff…

P1-- 信号--通讯原理

前言&#xff1a; 最近看了《无线系统设计与国际标准》后面的几个核心技术 OFDM,Modulation&#xff0c;格雷码&#xff0c;MIMO 等技术&#xff0c;其底层的数学思想主要包括傅里叶变换 &#xff0c;狄拉克函数&#xff0c;卷积&#xff0c;线性代数基础运算。 这边结合 北京…

Electron开发-从推门到进门

一、Electron 的介绍 Electron是利用web前端技术进行桌面应用开发的一套框架。是由 github 开发的开源框架&#xff0c;允许开发者使用 Web 技术构建跨平台的桌面应用&#xff0c;它的基本结构&#xff1a; Electron Chromium Node.js Native API Chromium&#xff1a;为 …

大数据挖掘-伤寒论和金匮要略(COVID-19用药启示录)

来自Toby老师&#xff0c;大数据挖掘-伤寒论和金匮要略 大家好&#xff0c;我是Toby老师&#xff0c;三年来新冠病毒肆虐全球&#xff0c;带来一些列症状&#xff0c;例如发热&#xff0c;恶寒&#xff0c;咳嗽&#xff0c;咽喉痛&#xff0c;腹泻&#xff0c;心脑血管疾病等等…

最低成本尝试做游戏的方式

本文首发于微信公众号&#xff1a;小蚂蚁教你做游戏。欢迎关注领取更多学习做游戏的原创教程资料&#xff0c;每天学点儿游戏开发知识。嗨&#xff01;大家好&#xff0c;我是小蚂蚁。如果说有 100 个人想过去做游戏的话&#xff0c;那么最终大概只有不到 20 个人真的去尝试了&…

【TypeScript】TS类型断言-类型的声明和转换(五)

&#x1f431;个人主页&#xff1a;不叫猫先生 &#x1f64b;‍♂️作者简介&#xff1a;前端领域新星创作者、华为云享专家、阿里云专家博主&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &#x1f4ab;系列专栏&#xff…

echartjs 实现 cross (十星辅助线)跟随吸附高亮点

前言 项目是金融项目&#xff0c;就像支付宝基金的走势图一样。但图表库使用的是 echart 而不是 antv 的 f2&#xff0c;要问为什么不直接用 f2 &#xff1f;问就是因为项目历史包袱。 背景 了解过 echart 的都知道&#xff0c;官方提供了十星辅助线&#xff0c;只要设置 ax…

服务端渲染和客户端渲染

介绍 服务端渲染 servlet开发 浏览器请求servlet&#xff0c;servlet在服务端生成html 响应给浏览器&#xff0c;浏览器展示html的内容&#xff0c;这个过程就是服务端渲染。 输入url——>请求到tomcat——Servlet / jsp来解析解析用户请求并处理——>服务端渲染生成ht…

收藏网页版小游戏:蜘蛛纸牌、扫雷、水果忍者、打地鼠、吃豆人

学习之余当然是摸鱼了&#xff0c;这里分享几个不用下载直接在线玩耍的游戏。有蜘蛛纸牌网页版在线玩、在线扫雷小游戏、在线玩的水果忍者、吃豆人、打地鼠、3D模仿。 下面我将一个个列出来。欢迎体验收藏&#xff01; 蜘蛛纸牌&#xff1a;这是一款刺激好玩的棋牌小游戏。大家…