重建二叉树(链表实现)

由前序遍历和中序遍历重建二叉树,再有后序遍历方法输出后序遍历

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct Node
{
    char value;
    Node *left, *right;
};
Node *build_new_node(char ch)
{
    Node *p = (Node*)malloc(sizeof(Node));
    p->value = ch;
    p->left = p->right = NULL;
    return p;
}
Node *rebuild(char* pre, char* in, int n)
{
    if(n <= 0)
        return NULL;
    Node *p = build_new_node(pre[0]);
    int k = strchr(in,pre[0])-in;
    p->left = rebuild(pre+1, in, k);
    p->right = rebuild(pre+k+1, in+k+1, n-k-1);
    return p;
}
void postOrder(Node *p)
{
    if(p == NULL)
        return ;
    postOrder(p->left);
    postOrder(p->right);
    printf("%c",p->value);
}
int main()
{
    char preOrder[30],inOrder[30];
    while(~scanf("%s%s",preOrder,inOrder))
    {
        Node *root = rebuild(preOrder,inOrder,strlen(preOrder));
        postOrder(root);
        printf("\n");
    }
    return 0;
}

由后序遍历和中序遍历重建二叉树,再有前序遍历方法输出前序遍历


#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct Node
{
    char value;
    Node *left, *right;
};
Node *build_new_node(char ch)
{
    Node *p = (Node*)malloc(sizeof(Node));
    p->value = ch;
    p->left = p->right = NULL;
    return p;
}
Node *rebuild(char* post, char* in, int n)
{
    if(n <= 0)
        return NULL;
    int k = strchr(in, post[n-1])-in;
    Node *p = build_new_node(post[n-1]);
    p->left = rebuild(post, in, k);
    p->right = rebuild(post+k, in+k+1, n-k-1);
    return p;
}
void preOrder(Node *p)
{
    if(p == NULL)
        return ;
    printf("%c",p->value);
    preOrder(p->left);
    preOrder(p->right);
}
int main()
{
    char postOrder[30],inOrder[30];
    while(~scanf("%s%s",postOrder,inOrder))
    {
        Node *root = rebuild(postOrder,inOrder,strlen(postOrder));
        preOrder(root);
        printf("\n");
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值