【Tsinghua】树重建(Rebuild)

2023-11-05 04:48
文章标签 tsinghua 重建 rebuild

本文主要是介绍【Tsinghua】树重建(Rebuild),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这道题就是各种顺序的遍历一棵树。。。

树重建(Rebuild)

描述

某二叉树的n个节点已经用[1, n]内的整数进行了编号。现给定该二叉树的中序遍历序列和后序遍历序列,试输出其对应的先序遍历序列。  

输入

第一行为一个整数n。

第二、三行,即已知的中序、后序遍历序列。

输出

仅一行。

若所给的中序、后序遍历序列的确对应于某棵二叉树,则输出其先序遍历序列。否则,输出-1。

输入样例1

5
4 2 5 1 3
4 5 2 3 1

输出样例1

1 2 4 5 3

输入样例2

3
2 3 1
1 2 3

输出样例2

-1

限制

1 ≤ n ≤ 5000

时间:2 sec

空间:256MB

输入和输出的遍历序列均为[1, n]内整数的一个排列,整数间均以空格分隔,行末没有多余空格。

提示

不同遍历序列中根节点的位置。



AC的代码:

#include <stdio.h>
#include <stdlib.h>
#define MAXN 5005int in[MAXN];       //中序
int af[MAXN];       //后序
int ans[MAXN];		//最后输出的前序序列
int count=0;struct TreeNode
{struct TreeNode* left;struct TreeNode* right;int elem;
};TreeNode* BinTree(int inorder[], int aftorder[], int length)
{if(length == 0){return NULL;}TreeNode* node = new TreeNode;		//新建一个树节点node->elem = *(aftorder+length-1);ans[count++]=node->elem;		//存入答案int rootIndex=0;for( ;rootIndex<length;rootIndex++)		//在中序遍历中找这个根节点{if(inorder[rootIndex]==*(aftorder+length-1))break;}if(rootIndex>=length){printf("-1\n");exit(0);}node->left = BinTree(inorder,aftorder,rootIndex);node->right = BinTree(inorder+rootIndex+1 , aftorder+rootIndex , length-(rootIndex+1));return node;
}int main()
{int n;scanf("%d",&n);int i;for(i=0;i<n;i++)scanf("%d",&in[i]);for(i=0;i<n;i++)scanf("%d",&af[i]);BinTree(in,af,n);for(i=0;i<count-1;i++)printf("%d ",ans[i]);printf("%d\n",ans[i]);return 0;
}




这篇关于【Tsinghua】树重建(Rebuild)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/347506

相关文章

Python(TensorFlow和PyTorch)两种显微镜成像重建算法模型(显微镜学)

🎯要点 🎯受激发射损耗显微镜算法模型:🖊恢复嘈杂二维和三维图像 | 🖊模型架构:恢复上下文信息和超分辨率图像 | 🖊使用嘈杂和高信噪比的图像训练模型 | 🖊准备半合成训练集 | 🖊优化沙邦尼尔损失和边缘损失 | 🖊使用峰值信噪比、归一化均方误差和多尺度结构相似性指数量化结果 | 🎯训练荧光显微镜模型和对抗网络图形转换模型 🍪语言内容分比 🍇Python图像归一化

JD 1385:重建二叉树

OJ题目:click here~~ 题目分析:给前序遍历序列和中序遍历序列,重构二叉树并输出后序遍历序列 剑指offer 面试题6 AC_CODE int pre[1008] , in[1008] ;struct Node{int x ;Node *left ;Node *right ;};bool buildsubtree(Node*& root , int* spre , in

Activity转屏重建之 Activity.onConfigurationChanged

偶尔也会遇到由于转屏引起的一些问题。 有些时候,并不希望由于转屏使得Activity取重建。 再如键盘消失后的重建。 下面以一个demo为例子,小小总结一下用法。 如果想在转屏后,屏幕上立马打印出当前处于什么横竖屏状态 1.都知道有个属性android:configChanges可以用来定义什么情况下可以使得Activity不会restart。 android:configC

Activity生命周期 与 重建

每一个Android应用程序在运行时,对于底层的Linux Kernel而言都是一个单独的进程,但是对于Android系统而言,因为局限于手机画面的大小与使用的考虑,不能把每一个运行中的应用程序窗口都显示出来。   所以通常手机系统的界面一次仅显示一个应用程序窗口,Android使用了Activity的概念来表示界面。   运行中的应用程序分为五大类,分别是:     前景模式

【conda】导出和重建 Conda 环境

目录 1. 导出 Conda 环境1.1 激活环境1.2 导出环境配置1.3 检查和编辑环境配置文件(可选)1.4 共享或重建环境 2. 常见问题及解决方案2.1 导出环境时出现 “PackagesNotFoundError”2.2 导出的 `environment.yml` 文件在其他系统上无法使用2.3 导出的环境文件过大2.4 如何处理 Conda 环境中的 pip 包2.5 在导出或

二叉树的遍历(篇5)由中序和先序序列重建二叉树

让我们考虑下面的遍历: 中序序列:DBEAFC 前序序列:ABDECF 在Preorder序列中,最左侧的元素是树的根。所以我们知道’A’是给定序列的根。通过在Inorder序列中搜索’A’,我们可以发现’A’左侧的所有元素都在左子树中,右侧的元素在右子树中。所以我们现在知道下面的结构。 A/ \/ \D B E F C 我们递归

根据前序和中序重建二叉树

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 #include <iostream>#include <vector>#include <math.h>#include <stdlib.h>

力扣406-根据身高重建队列(java详细题解)

题目链接:406. 根据身高重建队列 - 力扣(LeetCode) 前情提要: 因为本人最近都来刷贪心类的题目所以该题就默认用贪心方法来做。 贪心方法:局部最优推出全局最优。 如果一个题你觉得可以用局部最优推出全局最优,并且没有反例来反驳的话就可以用贪心来试试。 题目思路: 如果你看过我对于力扣135-分发糖果那篇题解的话,会发现这个题好像跟那个有一点类似。 类似在哪里? 这俩道题

剑指offer2-重建二叉树

二叉树的遍历: 先序遍历:先访问根节点,再访问左子树,最后访问右子树; 中序遍历:先访问左子树,再访问根节点,最后访问右子树; 后序遍历:先访问左子数,再访问右子树,最后访问根节点; 一般给定一棵二叉树的中序遍历和先序遍历或者给定一个二叉树的中序遍历和后序遍历,这棵二叉树就可以确定下来。仅仅给定先序遍历和后序遍历是无法确定的。 题目: 给定某二叉树的先序和中序遍历结果,请确定该二叉树: