• poj2255Tree Recovery【二叉树重构】


    大意:告诉你一棵二叉树的先序遍历和中序遍历求该二叉树的后续遍历

    代码:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 using namespace std;
     5 
     6 const int maxn = 30;
     7 char pr[maxn], mi[maxn];
     8 
     9 struct Node {
    10     int left;
    11     int right;
    12 }tr[maxn];
    13 
    14 int root;
    15 
    16 void init(int p) {
    17     tr[p].left = -1;
    18     tr[p].right = -1;
    19 }
    20 
    21 void fason(int pa, int son) {
    22     if(son < pa) {
    23         if(tr[pa].left == -1) {
    24             init(son);
    25             tr[pa].left = son;
    26         } else fason(tr[pa].left, son);
    27     } else {
    28         if(tr[pa].right == -1) {
    29             init(son);
    30             tr[pa].right = son;
    31         } else fason(tr[pa].right, son);
    32     }
    33 }
    34 
    35 void build_tree() {
    36     for(int i = 0; mi[i]; i++) {
    37         if(mi[i] == pr[0]) {
    38             root = i;
    39             init(root);
    40             break;
    41         }
    42     }
    43     for(int i =1; pr[i]; i++) {
    44         for(int j = 0; mi[j]; j++) {
    45             if(mi[j] == pr[i]) {
    46                 fason(root, j);
    47                 break;
    48             }
    49         }
    50     }
    51 }
    52 void pre_out(int p) {
    53     printf("%c", mi[p]);
    54     if(tr[p].left != -1) pre_out(tr[p].left);
    55     if(tr[p].right != -1) pre_out(tr[p].right);
    56 }
    57 void mid_out(int p) {
    58     if(tr[p].left != -1) mid_out(tr[p].left);
    59     printf("%c", mi[p]);
    60     if(tr[p].right != -1) mid_out(tr[p].right);
    61 }
    62 
    63 void back_out(int p) {
    64     if(tr[p].left != -1) back_out(tr[p].left);
    65     if(tr[p].right != -1) back_out(tr[p].right);
    66     printf("%c", mi[p]);
    67 }
    68 
    69 int main() {
    70     while(EOF != scanf("%s %s",pr, mi) ) {
    71         build_tree();
    72         pre_out(root);
    73         puts("");
    74         mid_out(root);
    75         puts("");
    76         back_out(root);
    77         puts("");
    78     }
    79     return 0;
    80 }
    View Code
  • 相关阅读:
    对初学者的几点建议
    关于.net的一些资源网站
    iis 经常出现的问题以及解决方案
    C#编程规范(2008年4月新版)
    优秀ASP.NET程序员的修炼之路
    网站软件开发规范(某门户网站的)
    asp.net跳转页面的三种方法比较
    H5开发相关资料
    C#简介
    用C#获取硬盘序列号,CPU序列号,网卡MAC地址
  • 原文地址:https://www.cnblogs.com/zhanzhao/p/3989262.html
Copyright © 2020-2023  润新知