• 九度oj 1523 从上往下打印二叉树


    原题链接:http://ac.jobdu.com/problem.php?pid=1523

    建树,再层次遍历bfs。为了找根方便些,加了father指针。。。

    如下:

     1 #include<algorithm>
     2 #include<iostream>
     3 #include<cstdlib>
     4 #include<cstring>
     5 #include<cstdio>
     6 #include<vector>
     7 #include<queue>
     8 using std::queue;
     9 using std::vector;
    10 using std::cin;
    11 const int Max_N = 1100;
    12 struct Node{
    13     int v;
    14     Node *f, *ch[2];
    15     inline void set(int _v = 0, Node *p = NULL){
    16         v = _v, f = ch[0] = ch[1] = p;
    17     }
    18     inline void link(Node *x, bool d){
    19         ch[d] = x;
    20         x->f = this;
    21     }
    22 };
    23 struct BinaryTree{
    24     Node *tail, *root, *null;
    25     Node stack[Max_N], *ptr[Max_N];
    26     void init(){
    27         tail = &stack[0];
    28         null = tail++;
    29         null->set();
    30         root = null;
    31     }
    32     inline Node *newNode(int v){
    33         Node *p = tail++;
    34         p->set(v, null);
    35         return p;
    36     }
    37     inline void gogo(int n){
    38         char c;
    39         int i, v, a, b;
    40         for (i = 1; i <= n; i++){
    41             scanf("%d", &v);
    42             ptr[i] = newNode(v);
    43         }
    44         for (i = 1; i <= n; i++){
    45             cin >> c;
    46             if (c == 'd'){
    47                 scanf("%d %d", &a, &b);
    48                 ptr[i]->link(ptr[a], 0);
    49                 ptr[i]->link(ptr[b], 1);
    50             } else if (c == 'l'){
    51                 scanf("%d", &a);
    52                 ptr[i]->link(ptr[a], 0);
    53             } else if (c == 'r'){
    54                 scanf("%d", &b);
    55                 ptr[i]->link(ptr[b], 1);
    56             } else {
    57                 ;
    58             }
    59             if (ptr[i]->f == null) root = ptr[i];
    60         }
    61     }
    62     inline void bfs(){
    63         queue<Node *> que;
    64         vector<int> ans;
    65         que.push(root);
    66         while (!que.empty()){
    67             Node *x = que.front();
    68             que.pop();
    69             ans.push_back(x->v);
    70             if (x->ch[0] != null) que.push(x->ch[0]);
    71             if (x->ch[1] != null) que.push(x->ch[1]);
    72         }
    73         int n = ans.size();
    74         for (int i = 0; i < n; i++){
    75             printf("%d%c", ans[i], i < n - 1 ? ' ' : '
    ');
    76         }
    77     }
    78 }tree;
    79 int main(){
    80 #ifdef LOCAL
    81     freopen("in.txt", "r", stdin);
    82     freopen("out.txt", "w+", stdout);
    83 #endif
    84     int n;
    85     while (~scanf("%d", &n)){
    86         tree.init(), tree.gogo(n), tree.bfs();
    87     }
    88     return 0;
    89 }
    View Code
    By: GadyPu 博客地址:http://www.cnblogs.com/GadyPu/ 转载请说明
  • 相关阅读:
    滚动 冻结 div demo
    JavaScript去除字符串两边空格trim
    window.showModalDialog以及window.open用法简介
    转: 分享我创业4年失败的经历
    [转]JavaScript break跳出多重循环
    showModalDialog 传值及刷新
    防止文字撑开表格,强制表格大小
    带记忆功能的表单
    checkbox 全选
    asp教程:关于jquery跨域彻底的解决方法
  • 原文地址:https://www.cnblogs.com/GadyPu/p/4477606.html
Copyright © 2020-2023  润新知