根据二叉树的前序和中序构建树,并按层次输出(C++)vector存树
#include <bits/stdc++.h>
#define int long long
using namespace std;
#define endl '\n'
int po[35];
int ino[35];
vector<int>ans[50];
int dfs(int l1, int r1, int l2, int r2) {
for (int i = l2; i <= r2; i++) {
if (ino[i] == po[r1]) {
int root = po[r1];
int lc = dfs(l1, l1 + i - l2 - 1, l2, i - 1) ; //递归左子树
int rc = dfs(l1 + i - l2, r1 - 1, i + 1, r2) ; //递归右子树
if (lc) ans[root].push_back(lc); //存进对应的根中
if (rc) ans[root].push_back(rc);//同上
return root;
}
}
return 0;
}
void solve() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) cin >> po[i];
for (int i = 1; i <= n; i++) cin >> ino[i];
dfs(1, n, 1, n);
queue<int>q;
q.push(po[n]);
cout << po[n];
while (q.size()) {
int t = q.front();
q.pop();
for (auto i : ans[t]) {
q.push(i);
cout << " " << i;
}
}
}
signed main() {
int t = 1;
// cin>>t;
while (t--) solve();
return 0;
}
根据二叉树的前序和中序构建树,并按层次输出(C++)vector存树的更多相关文章
- [leetcode] 二叉树的前序,中序,后续,层次遍历
前序遍历 [144] Binary Tree Preorder Traversal 递归遍历 使用递归,先保存父节点的值,再对左子树进行遍历(递归),最后对右子树进行遍历(递归) vector< ...
- Java实现二叉树的前序、中序、后序遍历(非递归方法)
在上一篇博客中,实现了Java中二叉树的三种遍历方式的递归实现,接下来,在此实现Java中非递归实现二叉树的前序.中序.后序遍历,在非递归实现中,借助了栈来帮助实现遍历.前序和中序比较类似,也简单 ...
- LeetCode二叉树的前序、中序、后序遍历(递归实现)
本文用递归算法实现二叉树的前序.中序和后序遍历,提供Java版的基本模板,在模板上稍作修改,即可解决LeetCode144. Binary Tree Preorder Traversal(二叉树前序遍 ...
- Java实现二叉树的前序、中序、后序、层序遍历(非递归方法)
在上一篇博客中,实现了Java中二叉树的四种遍历方式的递归实现,接下来,在此实现Java中非递归实现二叉树的前序.中序.后序.层序遍历,在非递归实现中,借助了栈来帮助实现遍历.前序和中序比较类似, ...
- HDU 1710 (二叉树的前序和中序,求后序)
题目链接 题目大意: 输入二叉树的前序.中序遍历,请输出它的后序遍历 #include <stdio.h> #include <string.h> ; // 长度为n s1 前 ...
- 二叉树各种相关操作(建立二叉树、前序、中序、后序、求二叉树的深度、查找二叉树节点,层次遍历二叉树等)(C语言版)
将二叉树相关的操作集中在一个实例里,有助于理解有关二叉树的相关操作: 1.定义树的结构体: typedef struct TreeNode{ int data; struct TreeNode *le ...
- Python实现二叉树的前序、中序、后序、层次遍历
有关树的理论部分描述:<数据结构与算法>-4-树与二叉树: 下面代码均基于python实现,包含: 二叉树的前序.中序.后序遍历的递归算法和非递归算法: 层次遍历: 由前序序列.中 ...
- 二叉树的前序、中序、后序遍历 python
话不多说,直接上代码 class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None cl ...
- 二叉树的前序和中序得到后序 hdu1710
今天看学长发过来的资料上面提到了中科院机试会有一个二叉树的前序中序得到后序的题目.中科院的代码编写时间为一个小时,于是在七点整的时候我开始拍这个题目.这种类型完全没做过,只有纸质实现过,主体代码半个小 ...
- Java实现二叉树的前序、中序、后序遍历(递归方法)
在数据结构中,二叉树是树中我们见得最多的,二叉查找树可以加速我们查找的效率,那么输出一个二叉树也变得尤为重要了. 二叉树的遍历方法分为三种,分别为前序遍历.中序遍历.后序遍历.下图即为一个二叉 ...
随机推荐
- Golang-接口7
http://c.biancheng.net/golang/interface/ Go语言接口声明(定义) Go语言不是一种 "传统" 的面向对象编程语言:它里面没有类和继承的概念 ...
- 将文件转换为文件流进行上传(例:通过HDMI进行传输)
package com.boottest.app; import org.apache.commons.codec.Charsets; import org.apache.http.HttpEntit ...
- 多个tomcat启停脚本server.sh
vi server.sh #!/bin/bash export JAVA_HOME=/u01/java_home/jdk1.8.0_181 export JRE_HOME=${JAVA_HOME}/j ...
- kickstart和PXE安装
Kickstart安装Kickstart是一种无人值守的安装方式如果在安装过程中出现要填写参数的情况,安装程序首先会去查找Kickstart生成的文件,如果找到合适的参数,就采用所找到的参数:如果没有 ...
- github上文件过大无法推送问题
GitHub 对文件大小有限制,超过 100 MB 的文件无法直接推送到仓库中. 解决思路: 使用 Git Large File Storage (Git LFS) 来管理大文件 不上传对应的大文件 ...
- [CF494D] Birthday 题解
首先 \(S(u)\) 显然是 \(u\) 的子树. 假如 \(u\) 是定点,问题转化为区间求平方和,十分简单. 于是我们用线段树维护区间平方和,支持区间加,然后离线问题,在 \(u\) 的位置处理 ...
- js 字符串“http%3A%2F%2F”转换成http://详解
字符串"http%3A%2F%2F"转换成http://详解 我截获下来一个URL的字符串格式是"http%3A%2F%2F",但是实际应该是http:// 而 ...
- .NET 使用 DeepSeek R1 开发智能 AI 客户端
前言 最近 DeepSeek 可太火了,在人工智能领域引起了广泛的关注,其强大的自然语言处理能力和智能搜索功能让大家跃跃欲试. 对于 .NET 技术栈的开发来说,一个常见的问题是:能否在 .NET 程 ...
- keil优化等级说明 keil code optimization
其中 0级(Constan folding)的优化包括: a.常数折叠:只要有可能,编译器就执行将表达式化为常数数字的计算,其中包括运行地址的计算. b. 简单访问优化:对8051系统的内部数据和位地 ...
- 如何用爱思助手给苹果iPhone手机免越狱修改虚拟定位教程
使用爱思助手修改定位的方法: 1.在电脑上下载安装 爱思助手 客户端,并更新到最新版,用数据线将苹果移动设备连接到电脑. 2.连接成功后,依次打开爱思助手"工具箱 - 虚拟定位". ...