zoukankan      html  css  js  c++  java
  • 九度oj 1521 二叉树的镜像

    原题链接:http://ac.jobdu.com/problem.php?pid=1521 
    水题,如下。。

      1 #include<algorithm>
      2 #include<iostream>
      3 #include<cstdlib>
      4 #include<cstring>
      5 #include<cstdio>
      6 #include<vector>
      7 using std::cin;
      8 using std::swap;
      9 using std::vector;
     10 const int Max_N = 1010;
     11 struct Node {
     12     int v, rev;
     13     Node *fa, *ch[2];
     14     inline void set(int _v, Node *p) {
     15         v = _v, rev = 0;
     16         fa = ch[0] = ch[1] = p;
     17     }
     18     inline void link(Node *x, bool d) {
     19         ch[d] = x;
     20         x->fa = this;
     21     }
     22     inline void update() {
     23         rev ^= 1;
     24         swap(ch[0], ch[1]);
     25     }
     26     inline void push_down() {
     27         if (rev != 0) {
     28             ch[0]->update();
     29             ch[1]->update();
     30             rev ^= 1;
     31         }
     32     }
     33 };
     34 struct BinaryTree {
     35     Node *root, *null, *tail, *ptr[Max_N], stack[Max_N];
     36     void init() {
     37         tail = &stack[0];
     38         null = tail++;
     39         null->set(0, NULL);
     40         root = null;
     41     }
     42     inline Node *newNode(int v) {
     43         Node *p = tail++;
     44         p->set(v, null);
     45         return p;
     46     }
     47     inline void gogo(int n) {
     48         char c;
     49         int i, v, a, b;
     50         for (i = 1; i <= n; i++) {
     51             scanf("%d", &v);
     52             ptr[i] = newNode(v);
     53         }
     54         for (i = 1; i <= n; i++) {
     55             cin >> c;
     56             if (c == 'd'){
     57                 scanf("%d %d", &a, &b);
     58                 ptr[i]->link(ptr[a], 0);
     59                 ptr[i]->link(ptr[b], 1);
     60             } else if (c == 'l') {
     61                 scanf("%d", &a);
     62                 ptr[i]->link(ptr[a], 0);
     63             } else if (c == 'r') {
     64                 scanf("%d", &b);
     65                 ptr[i]->link(ptr[b], 1);
     66             }
     67             if (ptr[i]->fa == null) root = ptr[i];
     68         }
     69     }
     70     inline void PreOder(Node *x, vector<int> &res) {
     71         if (x != null) {
     72             x->push_down();
     73             res.push_back(x->v);
     74             PreOder(x->ch[0], res);
     75             PreOder(x->ch[1], res);
     76         }
     77     }
     78     inline void PreOder() {
     79         vector<int> res;
     80         if (root == null) {
     81             puts("NULL");
     82             return;
     83         }
     84         root->update();
     85         PreOder(root, res);
     86         int n = res.size();
     87         for (int i = 0; i < n; i++) {
     88             printf("%d%c", res[i], i < n - 1 ? ' ' : '
    ');
     89         }
     90     }
     91 }tree;
     92 int main() {
     93 #ifdef LOCAL
     94     freopen("in.txt", "r", stdin);
     95     freopen("out.txt", "w+", stdout);
     96 #endif
     97     int n;
     98     while (~scanf("%d", &n)) {
     99         tree.init();
    100         tree.gogo(n);
    101         tree.PreOder();
    102     }
    103     return 0;
    104 }
    View Code
    By: GadyPu 博客地址:http://www.cnblogs.com/GadyPu/ 转载请说明
  • 相关阅读:
    题解 LNOI2014 LCA
    题解 P3413 【SAC#1
    题解 P3372 【【模板】线段树 1】(珂朵莉树解法)
    题解 P2610 【[ZJOI2012]旅游】
    题解 CF911D 【Inversion Counting】
    题解 CF1037D 【Valid BFS?】
    bootstrap常用部件下载
    sql获取上月同期
    VSS配置
    SQL中的union,except,intersect用法
  • 原文地址:https://www.cnblogs.com/GadyPu/p/4534539.html
Copyright © 2011-2022 走看看