根据二叉树的后序和中序遍历输出先序遍历

2023-05-16

7-8 根据后序和中序遍历输出先序遍历 (20分)

本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果。

输入格式:
第一行给出正整数N(≤30),是树中结点的个数。随后两行,每行给出N个整数,分别对应后序遍历和中序遍历结果,数字间以空格分隔。题目保证输入正确对应一棵二叉树。

输出格式: 在一行中输出Preorder:以及该树的先序遍历结果。数字间有1个空格,行末不得有多余空格。

输入样例:
7
2 3 1 5 7 6 4
1 2 3 4 5 6 7
输出样例:
Preorder: 4 1 3 2 6 5 7

思路
因为后续遍历的最后一个数是二叉树的根节点,所以我们可以通过分岔递归(这个词自己编的)每次打印后续遍历的最后一个数,不断的把树的第一个节点打印,把先序遍历完成。

在中序遍历的数组中,根结点左边的节点数就是左子树的节点总数,根结点右边的节点数是右子树的节点总数,由此我们可以根据根结点坐标间的一些信息把这棵树分为左右子树,并得到它们的后续遍历和中序遍历,递归调用函数。递归的回溯条件是坐标起点值大于坐标终点值。

其中,我们可以通过一个哈希表把中序遍历的每个数的坐标记录下来,每次根据后续遍历的最后一个数的值找到其对应中序遍历的坐标,我们要让递归顺利进行,就需要知道后序遍历和中序遍历的起始坐标和终点坐标,通过坐标求得左右子树的节点个数继续安排下次递归的后序遍历和中序遍历的起始坐标和终点坐标
代码

#include <iostream>
#include <map>
using namespace std;

int postOrder[30], inOrder[30];//不用全局变量也可带入函数形参
map<int, int> Index;//用unordered_map更快

void printPreOrder(int postStart,int postEnd,int inStart, int inEnd) {
    if (postStart > postEnd)
        return;
    printf(" %d", postOrder[postEnd]);
    int index = Index[postOrder[postEnd]]; //中序遍历中树第一个节点的坐标
    int leftNodes = index - inStart, rightNodes = inEnd - index;
    printPreOrder(postStart, postEnd - rightNodes - 1, inStart, index - 1);
    printPreOrder(postEnd - rightNodes, postEnd - 1, index + 1, inEnd);
}

int main()
{
    int n;
    cin >> n;
    for (int i = 0; i < n; i++)
        cin >> postOrder[i];
    for (int i = 0; i < n; i++) {
        cin >> inOrder[i];
        Index[inOrder[i]] = i;
    }
    printf("Preorder:");
    printPreOrder(0, n - 1, 0, n - 1);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据二叉树的后序和中序遍历输出先序遍历 的相关文章

  • Python 读取pdf

    好久没有更新 xff0c 主要是工作比较忙 抽空记录一个最近用到的东西 用python 读取pdf 话不多少 还是先上代码 span class token keyword import span pdfplumber span class
  • Python中的字符串相似度

    文章目录 一 Python字符串相似度二 Python相似度评估1 在计算图片的相似度时 xff0c 我自己用到过余弦距离2 欧式距离3 曼哈顿距离4 切比雪夫距离5 闵可夫斯基距离6 标准化欧氏距离7 马氏距离8 编辑距离 一 Pytho
  • 浅谈linux开发板用户登录之getty/login/passwd

    最近在排查一个关于用户登录的问题 xff0c 需要了解开发板启动以及远程登录进行用户名和密码验证背后的原理 经过查询学习 xff0c 简单总结如下 文章目录 前言一 Linux开发板登录机制二 getty login passwd1 get
  • 【实用技巧】rpm包下载,安装。获取rpm资源

    1 rpm包下载 我们使用yum install命令的时候一般下载下来会直接安装 xff0c 但是如果我们只想下载rpm包而不安装该怎么做呢 xff1f 安装 yum utils yum span class token function
  • 新手折腾wsl

    新手折腾wsl图形界面 本文记录一些本人 xff08 未学习Linux相关知识 xff09 折腾wsl踩过的坑 xff0c 以及参考的有效的解决方案 换源 这个搞过的都懂 xff0c 不翻墙的话 xff0c 用本身的那个源 xff0c 更新
  • Windows server

    显示win server信息 xff1a 进入cmd下输入systeminfo 启动控制台 没有功能可以添加 xff1a mmc 启动服务器管理器 xff1a services msc 进入防火墙的配置 xff1a wf msc 添加Win
  • 配置与管理DNS服务器

    实训目的 项目环境及要求 win2012 1 xff08 已经安装了long com域 xff09 xff08 并且是long com的域控 xff09 win2012 4 xff08 在这台服务器上部署DNS服务 xff09 win7 x
  • 配置与管理Web和FTP服务器

    实训目的 项目环境要求 win2012 1 xff1a 已经安装long com的域并且已经安装DNS win2012 4 xff1a 部署服务 win7 安装服务 添加功能 勾选 安装完成 进入IIS管理器 在此完成网站的创建和FTP的创
  • 公式推导

    公式推导 事件为相互独立的情况 xff1a n 个相互独立且服从相同分布的事件 X 1 X 2 X n xff0c 其标准差为 期望为 则总的的事件的期望和方差分别为 xff1a E X 1 43 X 2 43 X n
  • Windows 10 docker 容器添加新端口映射的方法与步骤

    在Docker容器已经创建后 xff0c 需要添加新的端口映射 xff0c 即对已经存在的Docker容器添加新的端口映射 xff0c 可以通过以下步骤来添加 xff0c 即通过修改配置文件的方法 1 Windows 10 下 Docker
  • 配置yum源挂载mount /dev/sr0 /iso报错mount: 在 /dev/sr0 上找不到媒体

    span class token punctuation span root 64 localhost span class token punctuation span span class token comment umount de
  • Debian之CA认证

    安装服务 root 64 debian etc chrony span class token comment apt install y openssl span 配置文件 root 64 debian etc chrony span c
  • 字符串内建函数

    find函数查找 strint example span class token operator 61 span span class token string 34 hello world good night 34 span inde
  • 列表·元组·字典

    使用索引访问列表元素 list explam span class token operator 61 span span class token punctuation span span class token string 39 xi
  • Python函数

    默认参数 def print info span class token punctuation span name age span class token operator 61 span span class token number
  • 辗转相除法原理讲解

    首先介绍一下辗转相除法 xff1a 即m 和 n求最大公因数 xff08 假设m大于n xff09 xff0c 先用 m 除以 n xff0c 如果余数 r 为 0 xff0c 则 n 就是最大公因数 xff0c 否则 xff0c 将 n
  • 手把手系列---安装SpotBugs、并快速上手使用

    手把手系列 安装SpotBugs 手把手系列前言一 SpotBugs是什么 xff1f 二 SpotBugs 的下载1 在线安装 xff08 三步 xff09 2 网页下载百度云下载到本地 三 使用SpotBugs常用配置SpotBugS使
  • windows安装vcpkg过程下载失败问题的解决方法

    vcpkg的中文文档 xff1a https github com microsoft vcpkg blob master README zh CN md 第一步 xff1a 从GitHub拉取 git clone https github
  • 51单片机定时器初值计算问题

    最近在看51单片机的定时器与中断 xff0c 作为51单片机比较重点的内容 xff0c 很多人也花费了很长时间在这上面 xff0c 有些问题网上的资料方法各不相同 xff0c 也看得云里雾里 xff0c 比如定时器的初值计算问题 xff0c

随机推荐

  • Go 在 Windows 上用户图形界面 GUI 解决方案 Go-WinGUI 国产(使用cef 内核)

    Go 在 Windows 上用户图形界面 GUI 解决方案 Go WinGUI 国产 xff08 使用cef 内核 xff09 参考文章 xff1a xff08 1 xff09 Go 在 Windows 上用户图形界面 GUI 解决方案 G
  • MXNet 中文文档

    MXNet 中文文档 MXNet 中文文档 MXNet设计和实现简介编程接口 Symbol 声明式的符号表达式NDArray命令式的张量计算KVStore 多设备间的数据交互读入数据模块训练模块 系统实现 计算图 计算图优化内存申请 引擎数
  • mybatis-plus整合springboot自动生成文件

    mybatis plus整合springboot自动生成dao层 导入依赖 span class token tag span class token tag span class token punctuation lt span dep
  • c++实现——TT的神秘礼物

    题意 TT 是一位重度爱猫人士 xff0c 每日沉溺于 B 站上的猫咪频道 有一天 xff0c TT 的好友 ZJM 决定交给 TT 一个难题 xff0c 如果 TT 能够解决这个难题 xff0c ZJM 就会买一只可爱猫咪送给 TT 任务
  • 简单差分方法的应用

    题意 Thanks to everyone s help last week TT finally got a cute cat But what TT didn t expect is that this is a magic cat O
  • 咕咕东的奇妙序列 --找规律

    题目描述 咕咕东 正在上可怕的复变函数 xff0c 但对于稳拿A Plus的 咕咕东 来说 xff0c 她早已不再听课 xff0c 此时她在睡梦中突然想到了一个奇怪的无限序列 xff1a 112123123412345 这个序列由连续正整数
  • HRZ学英语

    思路 xff1a 这道题的要求很简单 第一个出现的26字母序列 xff0c 其字典序改成最小的即可 解释一下 1 给定序列 gt 61 26个 从左向右每26个字母为一组 xff0c 如果这组的 变成字母后满足26字母即可 xff0c 搜索
  • ZJM 与纸条

    ZJM 的女朋友是一个书法家 xff0c 喜欢写一些好看的英文书法 有一天 ZJM 拿到了她写的纸条 xff0c 纸条上的字暗示了 ZJM 的女朋友 想给 ZJM 送生日礼物 ZJM 想知道自己收到的礼物是不是就是她送的 xff0c 于是想
  • TT数鸭子

    题目描述 这一天 xff0c TT因为疫情在家憋得难受 xff0c 在云吸猫一小时后 xff0c TT决定去附近自家的山头游玩 TT来到一个小湖边 xff0c 看到了许多在湖边嬉戏的鸭子 xff0c TT顿生羡慕 此时他发现每一只鸭子都不
  • 中级软件设计师备考---软件工程2

    目录 软件测试分类和要求 测试用例设计 测试阶段 McCabe复杂度 软件维护 软件过程改进 CMMI CMM英文版 CMM中文版 CMMI 软件测试分类和要求 分类 灰盒测试 多用于集成测试阶段 不仅关注输出 输入的正确性 同时也关注程序
  • 数据库复习——第三章

    3 1 SQL概述 SQL支持关系数据库三级模式结构 SQL语言的功能 SQL功能动词数据查询SELECT数据定义CREATE DROP ALTER数据操纵INSERT UPDATE DELETE数据控制GRANT REVOKE Drop
  • 【ubuntu】ubuntu 安装软件的时候,执行add-apt-repository失败,update-ca-certificates

    在使用 ubuntu18 安装GCC 10 0的时候 xff0c 需要先执行add apt repository xff0c 结果报错了ERROR ubuntu toolchain r user or team does not exist
  • SQL语句练习(Student,Course,SC表)

    Create table Student 主码 xff0c 姓名 xff08 唯一 xff09 xff0c 性别 xff08 男 女 xff09 xff0c 年龄 xff08 18 25 xff09 span class token key
  • b站视频排行榜爬取

    bilibili排行榜爬取 众所周知 xff0c B站学习软件 哈哈哈哈 xff0c 今天我们就爬取B站的排行榜 废话不多说了 xff0c 直接开始了 分析 xff1a 我们看图一可以发现每个是视频的info都在li的标签里 xff0c 我
  • STM32F103笔记(二)——GPIO原理

    GPIO的工作原理与两个实验实例 一 STM32F103 GPIO说明1 stm32 GPIO引脚的主要功能2 GPIO相关配置寄存器的简介3 STM32F103 GPIO的8种工作方式4种输入模式4种输出模式 二 点亮LED实例 xff0
  • WSL2使用xrdp实现Liunx图形化桌面

    由于使用wsl跑代码时需要 pyplot 把数据可视化一下 xff0c 但是发现 import matplotlib pyplot as plt other code plt show 在 plt show 之后并没有图像被画出来 xff0
  • CentOS 8 安装图形界面GUI

    在安装CentOS8的桌面之前 xff0c 需要确保两点已做 xff1a xff08 1 xff09 在安装的时候 xff0c 勾选了安装Centos的GUI xff1b xff08 2 xff09 确保网络是联通的 xff0c ping一
  • 基于深度学习的目标跟踪的方法与实现 1、实现基于深度学习的目标跟踪方法 2、yolo v5目标检测模型预训练 3、行人检测模型

    摘要 目标检测支持许多视觉任务 如实例分割 姿态估计 跟踪和动作识别 这些计算机视觉任务在监控 自动驾驶和视觉答疑等领域有着广泛的应用 随着这种广泛的实际应用 目标检测自然成为一个活跃的研究领域 目标检测是一种计算机视觉技术 它允许我们识别
  • Mybatis-Plus代码生成器详解及完整代码实现

    意义 1 日常开发过程中 xff0c 常规后端开发接收到需求后 xff0c 进行数据库E R设计后创建对应数据表 无论基于speingmvc还是strtus xff08 同样是一个mvc框架 xff09 xff0c 都需要进行一些固定模板的
  • 根据二叉树的后序和中序遍历输出先序遍历

    7 8 根据后序和中序遍历输出先序遍历 20分 本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果 xff0c 输出该树的先序遍历结果 输入格式 第一行给出正整数N 30 xff0c 是树中结点的个数 随后两行 xff0c 每行给出N个整