zoukankan      html  css  js  c++  java
  • 二叉树的前序和中序得到后序 hdu1710

    今天看学长发过来的资料上面提到了中科院机试会有一个二叉树的前序中序得到后序的题目。中科院的代码编写时间为一个小时,于是在七点整的时候我开始拍这个题目。这种类型完全没做过,只有纸质实现过,主体代码半个小时差不多刚好拍完。适应杭电的多数据格式改了5分钟。感觉这个时间有点长,仍须努力。

    (g++可通过,因为是C++和C的混风)

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<string.h>
     4 struct node{
     5     node *left;
     6     node *right;
     7     int num;
     8     node()
     9     {
    10         left=NULL;
    11         right=NULL;
    12         num=0;
    13     }
    14 };
    15 int t;
    16 int index=0;
    17 int pre[1003];
    18 int in[1003];
    19 int ans[1003];
    20 void buildTree(node *root,int prel,int prer,int inl,int inr)
    21 {
    22     root->num=pre[prel];
    23     root->left=new node();
    24     root->right=new node();
    25     for(int i=inl;i<=inr;i++)
    26     {
    27         if(in[i]==pre[prel])
    28         {
    29             int zuol=i-inl;
    30             int youl=inr-i;
    31             if(zuol==0&&youl==0)
    32             {
    33                 root->right=NULL;
    34                 root->left=NULL;
    35             }
    36             else
    37             {
    38                 if(i==inr)
    39                 {
    40                     buildTree(root->left,prel+1,prel+zuol,inl,i-1);
    41                     root->right=NULL;
    42                 }
    43                 else
    44                     if(i==inl)
    45                     {
    46                         buildTree(root->right,prel+zuol+1,prer,i+1,inr);
    47                         root->left=NULL;
    48                     }
    49                     else
    50                     {
    51 
    52                         buildTree(root->left,prel+1,prel+zuol,inl,i-1);
    53                         buildTree(root->right,prel+zuol+1,prer,i+1,inr);
    54                     }
    55             }
    56         }
    57     }
    58 }
    59 void print(node *root)
    60 {
    61     if(root->left!=NULL)
    62         print(root->left);
    63     if(root->right!=NULL)
    64         print(root->right);
    65     ans[index++]=root->num;
    66 }
    67 int main()
    68 {
    69     int temp;
    70     
    71     while(scanf("%d",&t)!=EOF)
    72     {
    73         index=0;
    74         memset(pre,0,sizeof(int));
    75         memset(in,0,sizeof(int));
    76         memset(ans,0,sizeof(int));
    77         for(int i=0;i<t;i++)
    78             scanf("%d",&pre[i]);
    79         for(int i=0;i<t;i++)
    80             scanf("%d",&in[i]);
    81         node *root=new node();
    82         buildTree(root,0,t-1,0,t-1);
    83         print(root);
    84         for(int i=0;i<t-1;i++)
    85             printf("%d ",ans[i]);
    86         printf("%d
    ",ans[t-1]);
    87     }
    88     return 0;
    89 }
    hdu 1710

    后来看了下网上代码,发现有不需要构造树,直接用DFS的。高端洋气不清楚的样子。。

  • 相关阅读:
    默认Web字体样式
    从Reddit学到的七条经验
    Git魔法 前言
    26个提升java性能需要注意的地方
    解密Redis持久化
    离开Java,寻找更佳语言的10大理由
    » DebBuilder V2.2.2 测试版发布 Wow! Ubuntu
    YaCy 1.0 发布,自由软件搜索引擎
    Socket 短连接、长连接_YTmarkit的空间_百度空间
    TopHQBooks – PDF 搜索引擎 小众软件
  • 原文地址:https://www.cnblogs.com/holyprince/p/3295282.html
Copyright © 2011-2022 走看看