7-23 还原二叉树 (25 分)(分析加详解)

一:题目:

给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。

输入格式:
输入首先给出正整数N(≤50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。

输出格式:
输出为一个整数,即该二叉树的高度。

输入样例:
9
ABDFGHIEC
FDHGIBEAC
输出样例:
5

二:思路

利用前序和中序进行建树,然后求取二叉树的高度

三:上马

/*
思路:根据中序和前序进行建树  然后求的树的高度 
*/ 
#include<bits/stdc++.h>
using namespace std;typedef struct TNode* Bintree;
typedef struct TNode{char Date;Bintree left,right;
}tnode;Bintree CreatBintree(string s1,string s2,int prel,int prer,int inl,int inr)
{if(prel > prer){return NULL;}Bintree BT = (Bintree)malloc(sizeof(struct TNode));BT->Date = s1[prel];BT->left = NULL;BT->right = NULL;//	cout << s1[prel];int temp; for( int i = inl; i <= inr; i++ ){if( s2[i] == s1[prel]){temp = i;break;}}int numleft = temp - inl;//求出左子树上的结点数目BT->left = CreatBintree(s1,s2,prel+1,prel + numleft,inl,temp-1);BT->right = CreatBintree(s1,s2,prel+numleft + 1,prer,temp+1,inr);return BT;}int treehight(Bintree Bt)
{if(Bt == NULL)return 0;int m,n;m = treehight(Bt->left) +1;n = treehight(Bt->right) +1;return m > n? m:n;
}int main(){int N;string str1,str2;cin >> N >> str1 >> str2;Bintree Bt = CreatBintree(str1,str2,0,N-1,0,N-1);//houxv(Bt);int cnt = treehight(Bt);cout << cnt;}

在这里插入图片描述

总结:

这种题做了三遍了,核心递归建树那部分真的难 参数稍微错一点 就会 出现访问越界问题 ,用本题给的示例,进行找规律 不好,最好自己找一个左右子树结点个数差不多的二叉树 来找规律,我是拿笔在纸上自己递归几遍 ,就这样一点点找规律。
加油陌生的你!

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

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

相关文章

dotNET:怎样处理程序中的异常(实战篇)?

在上篇 《dotNET&#xff1a;怎样处理程序中的异常&#xff08;理论篇&#xff09;》 中讲了一些程序中出现异常怎样处理的理论知识&#xff0c;本文将以代码的方式来进行实践。环境dotNET Core&#xff1a;3.1工具&#xff1a;Rider 2019.3.2系统&#xff1a;macOS 10.15.4创建…

在 MySQL 中使用码农很忙 IP 地址数据库

在下载到码农很忙 IP 地址数据库后&#xff0c;我们可以将其存储在 MySQL 数据库中&#xff0c;并在需要查询某个 IP 对应的位置数据时&#xff0c;通过 SQL 语句获取正确的结果。这是一种很便捷的使用方式&#xff0c;并且在增加了恰当的索引后&#xff0c;可以取得不错的搜索…

java numberformat异常_Java NumberFormat格式化float类型的bug

首先&#xff0c;这个NumberFormat这个类&#xff0c;可以格式化各种数字。你只要稍微设置一下&#xff0c;结果还是很理性的。但是&#xff0c;他有那么一丢丢的bug&#xff0c;不知道你知道不&#xff1f;/*** 2.3F经过格式化&#xff0c;竟然变成2.99啦。what the fuck .* f…

7-24 树种统计 (25 分)(详解)map做法 map真香啊!

一&#xff1a;题目 7-24 树种统计 (25 分)随着卫星成像技术的应用&#xff0c;自然资源研究机构可以识别每一棵树的种类。请编写程序帮助研究人员统计每种树的数量&#xff0c;计算每种树占总数的百分比。 输入格式: 输入首先给出正整数N&#xff08;≤10 ​5 ​​ &#xf…

死磕 Redis,我有这么几招

如果你是一位后端工程师&#xff0c;面试时八成会被问到 Redis&#xff0c;特别是那些大型互联网公司&#xff0c;不仅要求面试者能简单使用 Redis&#xff0c;还要深入理解其底层实现原理&#xff0c;具备解决常见问题的能力。可以说&#xff0c;熟练使用 Redis 就是后端工程师…

回归统计在DMP中的实战应用

源宝导读&#xff1a;本文将讲解在大数据分析领域的线性回归统计计算方法&#xff0c;以及如何将非线性转化为线性回归的原理&#xff0c;同时介绍了两种的回归统计库的使用和对比&#xff0c;最后介绍线性回归在DMP产品的应用实践。一、背景回归统计&#xff0c;是数据分析常用…

龙芯3A5000初样顺利交付流片

此前&#xff0c;龙芯完成3A5000设计初样的流片交付。在3A4000架构的基础上&#xff0c;3A5000采用12纳米工艺&#xff0c;设计频率提高近40%&#xff0c;同频模式下功耗降低近60%&#xff0c;同时保持与3A4000芯片管脚兼容。龙芯3A5000和3A4000在微结构上变化不大&#xff0c;…

redhat java 多个版本_Linux下安装JDK(多个版本) 切换

1、检查系统是否自带了OpenJDK以及相关安装包&#xff0c;如果有的话则应先将其卸载。检查命令&#xff1a;java -versionrpm -qa | grep javarpm -e --nodeps tzdata-java-2013g-1.el6.noarchrpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.i686rpm -e --nodeps…

十分钟搭建自己的私有NuGet服务器-BaGet

点击上方蓝字"小黑在哪里"关注我吧搭建BaGet上传程序包在vs中使用其他前言NuGet是用于微软.NET&#xff08;包括 .NET Core&#xff09;开发平台的软件包管理器。NuGet能够令你在项目中添加、移除和更新引用的工作变得更加快捷方便。通常使用NuGet都是官方的服务&…

mysql or 创建索引_Mysql索引优化

1、单表索引优化单表索引优化分析创建表建表 SQLCREATE TABLE IF NOT EXISTS article(id INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,author_id INT(10) UNSIGNED NOT NULL,category_id INT(10) UNSIGNED NOT NULL,views INT(10) UNSIGNED NOT NULL,comments INT(1…

.Net Core HttpClient处理响应压缩

前言在上篇文章[ASP.NET Core中的响应压缩]中我们谈到了在ASP.NET Core服务端处理关于响应压缩的请求&#xff0c;服务端的主要工作就是根据Content-Encoding头信息判断采用哪种方式压缩并返回。之前在群里有人问道过&#xff0c;现在的网络带宽这么高了还有必要在服务端针对请…

mysql脚本的制作_制作脚本实现mysql自动备份

首先执行vi dbbackup.sh命令&#xff0c;在打开的编辑器输入&#xff1a;#!/bin/bash/usr/local/mysql/bin/mysqldump -uuser -ppasswd databasename > /home/wwwroot/backup/date_$(date%Y%m%d).sql这段命令的意思是&#xff1a;用mysqldump导出名为databasename的数据库到…

在 PostgreSQL 中使用码农很忙 IP 地址数据库

在下载到码农很忙 IP 地址数据库后&#xff0c;我们可以将其存储在 PostgreSQL 数据库中&#xff0c;并在需要查询某个 IP 对应的位置数据时&#xff0c;通过 SQL 语句获取正确的结果。这是一种很便捷的使用方式&#xff0c;并且在增加了恰当的索引后&#xff0c;可以取得不错的…

Java当中用 javabean和其他容器存入表格数据 或 利用 容器进行存储表格

一&#xff1a;javabean 和list容器或map容器 package cn.wyj.two;import java.util.*;/*** javabean :必须有一个无参构造函数&#xff1b;变量属性私有化&#xff1b;* 本篇还是打印一张表* author 86155**/ public class Demo13_Javabean和其他容器 {public static void ma…

7-25 朋友圈 (25 分)(详解+并查集的了解和应用)

一&#xff1a;题目 某学校有N个学生&#xff0c;形成M个俱乐部。每个俱乐部里的学生有着一定相似的兴趣爱好&#xff0c;形成一个朋友圈。一个学生可以同时属于若干个不同的俱乐部。根据“我的朋友的朋友也是我的朋友”这个推论可以得出&#xff0c;如果A和B是朋友&#xff0…

使用Azure人脸API对图片进行人脸识别

人脸识别是人工智能机器学习比较成熟的一个领域。人脸识别已经应用到了很多生产场景。比如生物认证&#xff0c;人脸考勤&#xff0c;人流监控等场景。对于很多中小功能由于技术门槛问题很难自己实现人脸识别的算法。Azure人脸API对人脸识别机器学习算法进行封装提供REST API跟…

java while do循环_c语言中,while 和 do while 循环的主要区别是( )

1、循环构造的表达式不同&#xff1a;while循环构造的表达式为&#xff1a;while(表达式)&#xff5b;循环体&#xff5d;。do&#xff0d;while循环构造表达式为&#xff1a;do&#xff5b;循环体&#xff1b;&#xff5d;while(条件表达)&#xff1b;。2、执行末尾循环体的次…

[NewLife.Net]单机400万长连接压力测试

目标对网络库NewLife.Net进行单机百万级长连接测试&#xff0c;并持续收发数据&#xff0c;检测网络库稳定性。【2020年8月1日晚上22点】先上源码&#xff1a;https://github.com/NewLifeX/NewLife.Net结论&#xff0c;8月1日晚达到200万&#xff0c;8月2日下午达到404万。上一…

ABP快速开发一个.NET Core电商平台

总听.NETer羡慕Java有SSM框架&#xff0c;其实.NET也有ABP&#xff0c;极度优秀的开源应用程序框架&#xff0c;支持.NET Framework和.NET Core。羡慕Java有SpringCloud&#xff0c;其实.NET也有ABP.vNext&#xff0c;由ABP团队全新打造的.NET Core微服务架构开源框架&#xff…

java swing 控件拖动_java swing中实现拖拽功能示例

java实现拖拽示例Swing中实现拖拽功能&#xff0c;代码很简单&#xff0c;都有注释&#xff0c;自己看&#xff0c;运行效果如下图&#xff1a;package com;import java.awt.*;import java.awt.datatransfer.DataFlavor;import java.awt.dnd.DnDConstants;import java.awt.dnd.…