美文网首页
用数组表示树并通过先序序列和中序序列建树

用数组表示树并通过先序序列和中序序列建树

作者: SephiHorse | 来源:发表于2019-01-20 15:48 被阅读0次
#include <iostream>
#include <sstream>
#include <algorithm>
#include <fstream>
#include <map> 
#include <math.h>
#include <string.h>
#include <stdlib.h>

//默认以先序序列编号
using namespace std;
int cnt=0;
char pre[100],mid[100],val[100];  
int lch[100],rch[100];
 
int buildtree(int L1,int R1,int L2,int R2){
    if(L1>R1) return 0;
    char root_val=pre[L1];
    int i=L2;
    while(mid[i]!=root_val) i++;
    int lcnt=i-L2;
    lch[L1]=buildtree(L1+1,L1+lcnt,L2,i-1);
    rch[L1]=buildtree(L1+lcnt+1,R1,i+1,R2);
    return L1;
}

void post(int root){
    if(root==0) return;
    post(lch[root]);
    post(rch[root]);
    cout<<val[root]<<" ";
}

int main()
{
    string p,m;
    getline(cin,p);
    getline(cin,m);
    for(int i=0;i<p.length();i++){
        val[i+1]=pre[i+1]=p[i];
    }
    for(int i=0;i<m.length();i++){
        mid[i+1]=m[i];
    }
    int root=buildtree(1,p.length(),1,p.length());
    post(root);
    return 0;
}

相关文章

  • 用数组表示树并通过先序序列和中序序列建树

  • 先序,中序序列 推导后序序列

    Problem Description 输入二叉树的先序遍历序列和中序遍历序列,输出该二叉树的后序遍历序列。 In...

  • 遍历序列构造二叉树

    1.由先序序列和中序序列可以唯一地确定一棵二叉树 1)先序序列第一个结点一定是根节点。2)中序序列以根节点分割成两...

  • 二叉树的序列化 和反序列化

    对于二叉树的序列化与反序列化有n种方法,本文以先序和层序的方式序列化和反序列化 对于,以先序的方式序列化: 1、以...

  • 刷题目录

    数组 滑动窗口的最大值 连续子数组的最大和 最大乘积子序列 树 二叉树的先序、中序、后序遍历-递归和非递归 排序 ...

  • sicily_1935_重建二叉树解题报告

    传送门:http://soj.sysu.edu.cn/1935 问题已知:一棵树先序遍历序列和中序遍历序列 思路:...

  • 2018-11-20

    数据结构 复习了森林转换成二叉树,并写出先序中序序列和后续线索,学习哈夫曼树的构造

  • 数据结构与算法-线索二叉树

    前言 遍历二叉树是以一定规则将二叉树中结点排列成一个线性序列,得到二叉树中结点的先序序列、中序序列、后序序列、这实...

  • 根据二叉树先序和中序遍历得出后序遍历

    思路: pre:前序遍历序列;in:中序遍历序列每次取先序序列的首字符即为当前子树的根结点,在中序序列中找到该字符...

  • 二叉树的遍历

    递归: 非递归: 无论是先序遍历序列还是后序遍历序列还是层次遍历序列,都必须知道中序遍历序列才能唯一确定一棵树。 ...

网友评论

      本文标题:用数组表示树并通过先序序列和中序序列建树

      本文链接:https://www.haomeiwen.com/subject/xhixjqtx.html