重建二叉树(已知两序求另一序)
来源:互联网 发布:阿里云免费套餐 编辑:程序博客网 时间:2024/06/05 08:50
重建二叉树,有两种情况:
由先序,中序求后序
由后序,中序求先序
因为中序的存在用作划分左右子树, 代码中应用了串的长度来划分子树
模拟一遍就是:
1. pre[]="ABDGHCEFI" ,
in[ ]="GDHBAECIF";
pre[0]就是根,在in中可知A的下标p为4; GDHBAECIF红色部分是左子树,紫色部分是右子树
左子树长度为4,那么pre+1到pre+1+p就是左子树 ; pre+p+1到最后就是右子树
最后递归求解,
同理:
2. char in[]="GDHBAECIF"
pos[]="GHDBEIFCA";
A在in中的下标p为4,则在pos中,左子树:pos到pos+p , 右子树pos+p到最后
#include<iostream>#include<cstring>using namespace std;void dfs_pre(char*in , char*pos , int len){ if(len<=0)return; int p = strchr(in,pos[len-1])-in; cout<<pos[len-1]; dfs_pre(in,pos,p); dfs_pre(in+p+1,pos+p,len-p-1);}void dfs_pos(char *in, char*pre , int len ){ if(len<=0)return; int p = strchr(in,pre[0])-in; dfs_pos(in,pre+1,p); dfs_pos(in+p+1,pre+p+1,len-p-1); cout<<pre[0];}int main(){ char pre[]="ABDGHCEFI",in[]="GDHBAECIF",pos[]="GHDBEIFCA"; dfs_pos(in,pre,strlen(in)); cout<<endl; dfs_pre(in,pos,strlen(in)); cout<<endl; return 0;}
0 0
- 重建二叉树(已知两序求另一序)
- 已知二叉树前序中序遍历重建二叉树
- 6.3.3 二叉树重建 已知前序和中序求后序
- NYOJ221二叉树重建(已知先序和中序求后序)
- 二叉树的重建,已知先序中序求后序,已知后序中序求先序
- 已知二叉树的前序遍历和中序遍历重建二叉树(二叉树)
- 已知二叉树的后序遍历和中序遍历重建二叉树(二叉树)
- 【二叉树】已知二叉树前序序列和中序序列,重建唯一二叉树
- 重建二叉树--已知一个二叉树的前、中序排列,重建出该二叉树。
- 已知二叉树的前序、中序遍历,重建二叉树
- 二叉树经典问题——已知中序和前序重建二叉树
- 已知二叉树先序遍历中序遍历求其后序遍历、重建二叉树
- 二叉树已知(中序+一序)求另一序
- 已知前序遍历和中序遍历,重建二叉树
- 二叉树的重建 已知前序 中序 求后序 递归的方法
- 已知前序遍历和中序遍历重建二叉树
- 已知中序遍历和先序遍历重建二叉树
- 已知前序遍历和中序遍历重建二叉树
- 手指触摸旋转游戏物体和放大物体的代码实现
- Trips and Users --Hard
- 二叉树中度为0的结点数与度为2的结点数关系论证
- Xcode 7.1项目中Objective-C和swift混合编程(一)
- coderforce 554B Ohana Cleans Up
- 重建二叉树(已知两序求另一序)
- LVM逻辑卷扩容
- linux压缩和解压
- 【PAT】1087. All Roads Lead to Rome (30)
- OC第五天:字典、集、数组排序
- 某大学医疗系统更改版
- Ulua学习笔记
- 单例
- 10.80386指令-Intel格式和AT&T格式的指令格式