首页 > 其他分享 >【数据结构】树的遍历

【数据结构】树的遍历

时间:2022-11-25 20:00:13浏览次数:69  
标签:pr 遍历 int 中序 ir 数据结构 root


【数据结构】树的遍历

​题目链接​

【数据结构】树的遍历_子树

思路

如果树节点都不一样,那么我们可用通过树的中序遍历和后序遍历确定一棵树。
我们通过哈希表来存左儿子和右儿子`

l[root]=
r[root]=

构造树
我们通过后序遍历得到最后一个点是根节点,然后在中序遍历中找到root,同时得到左子树和右子树在中序遍历中的区间。由于是同一棵树,中序遍历子树区间长度和后序遍历的是相同的,我们可用中序遍历得到的区间长度推算出后序遍历中左右子树区间位置
不过要先看一下子树是否存在

层序遍历
这个比较简单从root开始BFS,如果子树存在那就加入队列

代码

#include<bits/stdc++.h>
using namespace std;

const int N=40;
int n;
int postorder[N],inorder[N];
unordered_map<int,int>l,r,pos;

int build (int il,int ir,int pl,int pr)//il,ir中序遍历左右区间,pl,pr后序遍历左右区间
{
int root = postorder[pr];
int k=pos[root];//root在中序遍历中位置
if(il<k)l[root]=build(il,k-1,pl,pl+k-1-il);
if(ir>k)r[root]=build(k+1,ir,pr-ir+k,pr-1);//注意,后续遍历右边界是pr-1,不是pr
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()
{
cin>>n;
for(int i=0;i<n;i++)cin>>postorder[i];
for(int i=0;i<n;i++)
{
cin>>inorder[i];
pos[inorder[i]]=i;
}
int root=build(0,n-1,0,n-1);
bfs(root);
}


标签:pr,遍历,int,中序,ir,数据结构,root
From: https://blog.51cto.com/u_15891800/5887717

相关文章

  • [线段树 多tag]D-数据结构
    [线段树多tag]D-数据结构题目思路多tag的线段树有时序性问题,因此不能直接把标记累计。例如:对于同样两个标记+和*,ax+b和(x+b)*a是不一样的,因此我们需要设计tag合并的规则......
  • [NEFU 数据结构] 第 2 章 线性表 知识点整理
    [NEFU数据结构]第2章线性表知识点整理阅读须知需求指向:此博客用于应付NEFU数据结构考试,基于题目进行整理,不适合想深入学习数据结构与算法艺术的同学。前置知识:C语言......
  • [NEFU]数据结构 知识点整理和代码实现
    [NEFU]数据结构知识点整理和代码实现Author:2020-计6-zslID:Fishingrod阅读须知需求指向:此博客用于应付NEFU数据结构考试,基于题目进行整理,不适合想深入学习数据结构与算法......
  • [NEFU 数据结构] 第 1 章 绪论 知识点整理
    [NEFU数据结构]第1章绪论知识点整理阅读须知需求指向:此博客用于应付NEFU数据结构考试,基于题目进行整理,不适合想深入学习数据结构与算法艺术的同学。前置知识:C语言参......
  • PHP基于非递归方式算法实现先序/中序/后序遍历二叉树操作
    /** *PHP基于非递归方式算法实现先序/中序/后序遍历二叉树操作 *     A *    B   C *  D  E F   G......
  • 数据结构初阶--单链表(讲解+类模板实现)
    单链表概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。值得注意的是:1.链表的在逻辑是连续的,物理上不一......
  • 22.九种Map的遍历方式
    通过 entrySet 来遍历1、通过 for 和 map.entrySet() 来遍历第一种方式是采用 for 和 Map.Entry 的形式来遍历,通过遍历 map.entrySet() 获取每个 entry 的......
  • 数据结构——学习经验
    数据结构各位读者朋友,我是你们的好朋友IT黑铁,最近巩固一下数据结构,大部分适合我当前阶段的知识都已做了简介,而其他只列出了名字的有的是省略点到即可,有些高深的暂未研究。......
  • Java常用数据结构
    1、数组数组(Array) 是一种很常见的数据结构。它由相同类型的元素(element)组成,并且是使用一块连续的内存来存储。我们直接可以利用元素的索引(index)可以计算出该元......
  • 数据结构与算法java实现
    什么是数组?(1)数组是计算机中最基本的数据结构之一,我们会用一些名为索引的数字来标识每项数据在数组中的位置。(2)大多数编程语言中索引是从0开始的。(3)数组在内存中是存在......