蓝桥杯训练:简单树——先序和中序遍历转出后序遍历

来源:互联网 发布:java毫秒转换成分钟 编辑:程序博客网 时间:2024/06/06 07:36

问题描述:给出二叉树的先序,中序遍历序列,求出其后序遍历序列
作者:何知令
完成时间:2017年8月1日
输入:首行输入该二叉树节点数量,随后一行输入该二叉树前序序列,后一行输入中序序列
输出:该二叉树后序序列
算法思想:找根节点,在左子树中递归,在右子树中递归

代码:

/*问题描述:给出二叉树的先序,中序遍历序列,求出其后序遍历序列作者:何知令完成时间:2017年8月1日输入:首行输入该二叉树节点数量,随后一行输入该二叉树前序序列,后一行输入中序序列输出:该二叉树后序序列算法思想:找根节点,在左子树中递归,在右子树中递归*/#include <iostream>#include <malloc.h>using namespace std;char pre[100],in[100];typedef struct TreeNode{    struct TreeNode *lchild;    struct TreeNode *rchild;    char data;} BTNode;BTNode * CreateBT(char *pre,char *in,int n){    BTNode *b;    char r,*p;    int k;    if(n<=0)return NULL;    r=*(pre);//根节点值    b=(BTNode *)malloc(sizeof(BTNode));//申请一个BTNode类型的存储空间    b->data=r;    for(p=in; p<in+n; p++)        if(*p==r)            break;    k=p-in;//该根节点的左子树节点数量    b->lchild=CreateBT(pre+1,in,k);//对其左子树进行建树    b->rchild=CreateBT(pre+k+1,p+1,n-k-1);//对其右子树进行建树    return b;}void postVistBT(BTNode *b){    if(b!=NULL)    {        preVistBT(b->lchild);        preVistBT(b->rchild);        cout<<b->data<<' ';    }}int main(){    int n,i;    BTNode *bt;    cin>>n;    for(i=0; i<n; i++)        cin>>pre[i];    for(i=0; i<n; i++)        cin>>in[i];    bt=CreateBT(pre,in,n);    postVistBT(bt);    return 0;}

知识点总结:二叉树的遍历方式及二叉树的建立

学习心得:还是看了书上的代码才弄出来的

阅读全文
0 0
原创粉丝点击