前序 中序 -》 后序 (字符型数组)

#include<stdio.h>
#include<iostream>
#include<stack>
#include<string.h>
#include <queue>
using namespace std;
char before[100], in[100];
struct Node
{
    Node* lchild;
    Node* rchild;
    char data;
    Node(){  //自带的构造函数
        lchild = NULL;
        rchild = NULL;
    }
};
Node* build_tree(char before[], char in[], int length)
{
    if(length == 0) return NULL;
    int pos = 0;
    while(in[pos] != before[0]){
        pos++;
    }
    Node *temp = new Node(); //需要申请Node空间
    temp -> data = before[0];
    temp -> lchild = build_tree(before + 1, in, pos);
    temp -> rchild = build_tree(before + pos + 1, in + pos + 1, length - pos - 1);
    return temp;
}
void Traverse_Post(Node *root)
{
    if(root ->lchild != NULL){
        Traverse_Post(root ->lchild);
    }
    if(root ->rchild != NULL){
        Traverse_Post(root ->rchild);
    }
    if(root != NULL)
        cout << root -> data;
}
int main(){
    freopen("in.txt", "r", stdin);
    //freopen("out.txt", "w", stdout);
    int n;

    while(scanf("%s", before) != EOF){ //掌握输入输出的方法 输入字符串的时候 没有&
        scanf("%s", in);
        int L1 = strlen(before); //遇到'\0'截止 即输入的有效字符 (并不是指申请内存的长度)
        int L2 = strlen(in);
        //cout << L1 << " " << L2;
        Node * root = build_tree(before, in, strlen(before));
        Traverse_Post(root);
        cout << endl;
    }

    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值