• 二叉树的前序和中序得到后序 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的。高端洋气不清楚的样子。。

  • 相关阅读:
    WPF如何判断PNG中的点是透明的
    Silverlight DataGrid自适应数据
    DEVExpress For WPF 中GridControl如何实现滚动分页(延迟查询)
    如何通过样式来处理根据自身其他属性内容赋值其他属性值的方法研究
    最近涉及到的一些需要备忘的东西
    (转载)Setup Factory 会话变量
    (转载)解决WPF动画属性锁死问题
    WPF InkCanvas MouseDown及MouseLeftButtonDown事件不触发的代替事件
    在win7与XP系统下 C#缺省路径不同
    Xamarin笔记
  • 原文地址:https://www.cnblogs.com/holyprince/p/3295282.html
Copyright © 2020-2023  润新知