• ACM 重建二叉树


    重建二叉树

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:3
     
    描述
    题目很简单,给你一棵二叉树的后序和中序序列,求出它的前序序列(So easy!)。
     
    输入
    输入有多组数据(少于100组),以文件结尾结束。
    每组数据仅一行,包括两个字符串,中间用空格隔开,分别表示二叉树的后序和中序序列(字符串长度小于26,输入数据保证合法)。
    输出
    每组输出数据单独占一行,输出对应得先序序列。
    样例输入
    ACBFGED ABCDEFG
    CDAB CBAD
    
    样例输出
    DBACEGF
    BCAD


    这道题主要考查对二叉树的遍历的熟悉程度,对先序遍历,中序遍历,后序遍历的掌握程度;

    由后序遍历可以得到,最后一个字母应该就是树的根节点,中序遍历是先访问左子树,后访问根节点,在访问右子树,然后通过中序遍历的序列,可以把这颗树分成左右子树,得出这颗树的结构,然后再递归得出先序遍历的序列

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    struct Node
    {
        char value;
        Node* left;
        Node* right;
    };
    
    Node* buildNode(char value)
    {
        Node* node = (Node*)malloc(sizeof(Node));
        node->value = value;
        node->left = node->right = NULL;
        return node;
    }
    
    Node* rebuildTree(char* post, char* in, int len)
    {
        int i = 0;
        if(len == 0)
            return NULL;
        Node* head = buildNode(post[len-1]);
        for(i = 0; i < len; i++)
        {
            if(in[i] == post[len - 1])
                break;
        }
        head->left = rebuildTree(post, in, i);
        head->right = rebuildTree(post+i, in+i+1, len-i-1);
        return head;
    }
    
    void preorder(Node* head)
    {
        if(head == NULL)
            return;
        printf("%c", head->value);
        preorder(head->left);
        preorder(head->right);
    }
    
    int main()
    {
        char post[100], in[100];
        while(scanf("%s%s", post, in) != EOF)
        {
            preorder(rebuildTree(post, in, strlen(post)));
            printf("
    ");
        }
        return 1;
    }
  • 相关阅读:
    Ruby on rails3新手谈(1):Ruby on rails环境搭建
    更灵活,更易维护的WebHandler之通用webHandler编码方案(2)
    .Net Remoting之windows服务部署
    Ruby on rails3新手谈(2):简单的例子helloworld
    分组取最新记录的SQL
    验证日期的Javascript
    使用Javascript创建遮罩层并模拟Alert、Confirm对话框
    取得当前鼠标的X,Y坐标,及相关属性的介绍
    B/S结构系统中使用Session遇到的问题
    IE与FireFox的兼容性问题
  • 原文地址:https://www.cnblogs.com/sdlwlxf/p/4557344.html
Copyright © 2020-2023  润新知