首页 > 其他分享 >AcWing 1497. 树的遍历

AcWing 1497. 树的遍历

时间:2023-02-26 21:57:21浏览次数:30  
标签:遍历 int 中序 二叉树 1497 include root AcWing

【题目描述】
一个二叉树,树中每个节点的权值互不相同。
现在给出它的后序遍历和中序遍历,请你输出它的层序遍历。

【输入格式】
第一行包含整数N ,表示二叉树的节点数。
第二行包含N 个整数,表示二叉树的后序遍历。
第三行包含N 个整数,表示二叉树的中序遍历。

【输出格式】
输出一行N NN个整数,表示二叉树的层序遍历。

【数据范围】
1 ≤ N ≤ 30 

【输入样例】

7
2 3 1 5 7 6 4
1 2 3 4 5 6 7
【输出样例】

4 1 6 3 5 7 2

思路

给出后序遍历和中序遍历的结果,就可以构造出这棵树,有了数的结构,可以使用队列进行层序遍历

代码

#include<iostream>
#include<algorithm>
#include<unordered_map>
#include<queue>
#include<vector>
using namespace std;
const int N = 32;
int postorder[N],inorder[N];
unordered_map<int,int> l,r,pos;

vector<int> res;
//args(中序遍历左边界,中序遍历右边界,后续遍历左边界,后序遍历右边界)
int build(int il,int ir,int pl,int pr) {
   //后续遍历的最后一个就是根节点 int root = postorder[pr];
   //得到这一点的位置 int k = pos[root];    //建左树
if (il < k) l[root] = build(il,k-1,pl,pl+k-1-il);    //建右树
   if (ir > k) r[root] = build(k+1,ir,pl+k-il,pr-1); return root; } void bfs(int root) { queue<int> q; q.push(root); while (q.size()) { auto t = q.front(); q.pop(); cout << t << " ";
     //有左子树,就加入左子树的根节点 if (l.count(t)) q.push(l[t]);
     //有右子树,就加入右子树的根节点 if (r.count(t)) q.push(r[t]); } } int main() { int n; cin >> n; for(int i = 0;i < n;i++) cin >> postorder[i]; for(int j = 0;j < n;j++) { cin >> inorder[j]; //记录这一点的位置,方便找 pos[inorder[j]] = j; }
   //建树 int root = build(0,n-1,0,n-1); bfs(root); return 0; }

 

标签:遍历,int,中序,二叉树,1497,include,root,AcWing
From: https://www.cnblogs.com/polang19/p/17157858.html

相关文章

  • shell 遍历目录大小的经典写法
    #!/usr/bin/envbashexportPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/binread-p"请输入目录名称(例如:/root)"resultcd${result}forkin$(ls${re......
  • vue遍历数据
    vue代码<template><divclass="index"><!--遍历--><divv-for="(item,index)incatalogue":key="index"><!--页面跳转--><!--<route......
  • acwing 单调栈
    原题给定一个长度为N的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出-1。输入格式第一行包含整数N,表示数列长度。第二行包含N个整数,表示整数数列。......
  • 【LeetCode二叉树#07】左叶子节点之和(基于栈的迭代法前中后序遍历复习)
    左叶子节点之和力扣题目链接(opensnewwindow)计算给定二叉树的所有左叶子之和。示例:思路注意审题,这里是要求左叶子节点之和不是二叉树中的左侧节点之和,因此使用......
  • AcWing 第 92 场周赛 C题 4866. 最大数量 题解
    原题链接链表+并查集乱搞做法:思路首先可以发现,想要让度数尽量大,那我们应该构造成菊花图,即下图所示:对于每个需求,我们可以知道,如果之前他们没有连在一起,那我们一定得......
  • 2023.2.24AcWing蓝桥杯集训·每日一题
    今日复习的知识点为递归。递归对于笔者而言是个比较难以理解的知识点,后续会多进行递归题目的练习。AcWing1497.树的遍历题目描述一个二叉树,树中每个节点的权值互不相同......
  • 2023.2.25AcWing蓝桥杯集训·每日一题
    今日复习的知识点为并查集。AcWing1249.亲戚题目描述或许你并不知道,你的某个朋友是你的亲戚。他可能是你的曾祖父的外公的女婿的外甥女的表姐的孙子。如果能得到完整......
  • lua 递归遍历table所有元素
     TableHeapStr=""CurrentTableName=""functionprt(x)localrst=""iftype(x)=='number'ortype(x)=='string'ortype(x)=='function'ortype(x)=='nil......
  • 二叉树的遍历/递归/非递归/翻转
    二叉树的定义//定义一个二叉树节点structBiTreeNode{intvalue;structBiTreeNode*left;structBiTreeNode*right;};先序遍历(递归的形式)voidpreOrderT......
  • for in (var key in Obj)遍历JS对象/数组
    这个方法还可以遍历数组,就放在一起写了。letresult=function(obj){for(letkeyinobj){returnfalse;//若不为空,可遍历,返回false}returntrue;}conso......