树的遍历有三种方式.
1.前序遍历 先访问根节点,左子树,右子树
2.中序遍历 先左再根最后右
3.后续遍历 先左再右最后根.
实现遍历的三种差别在于输出位置的函数位置不同
1.前序遍历的函数.
prewalk(u)
if u==nil return ;
print u
prewalk(左子树)
prewalk(右子树)
2.中序
prewalk(u)
if u==nil return ;
prewalk(左子树)
print u
prewalk(右子树)
3.后序
prewalk(u)
if u==nil return ;
prewalk(左子树)
prewalk(右子树)
print u
然后如果我们有了一个树的先序和中序遍历,就能重建一个树.
先序 1 2 3 4 5 6 7 8 9
中序 3 2 5 4 6 1 8 7 9
先在先序取出一个点作为根 然后用这个根将中序划分成两部分
第一步 取1 把 中序分为 3 2 5 4 6 1 8 7 9
然后继续 再以2为根 又把上面分开的左边(3 2 5 4 6)
分为 (3 2 5 4 6) 以此类推 递归下去 就能重建一颗树.
最后重建树的代码:
#include
#include
#include
#include
using namespace std;
vector pre,post,in;
int pos=0;
void rec(int l,int r){
if(l>=r) return ;
int root=pre[pos++];
int dis=distance(in.begin(),find(in.begin(),in.end(),root));
rec(l,dis);
rec(dis+1,r);
post.push_back(root);
}
int main(){ int i,j,k,n;cin>>n;
for(i=1;i>k; pre.push_back(k);
}
for(i=1;i>k;in.push_back(k);
}
rec(0,pre.size());
for(i=0;i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?