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

 #include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<vector>
using std::cin;
using std::swap;
using std::vector;
const int Max_N = ;
struct Node {
int v, rev;
Node *fa, *ch[];
inline void set(int _v, Node *p) {
v = _v, rev = ;
fa = ch[] = ch[] = p;
}
inline void link(Node *x, bool d) {
ch[d] = x;
x->fa = this;
}
inline void update() {
rev ^= ;
swap(ch[], ch[]);
}
inline void push_down() {
if (rev != ) {
ch[]->update();
ch[]->update();
rev ^= ;
}
}
};
struct BinaryTree {
Node *root, *null, *tail, *ptr[Max_N], stack[Max_N];
void init() {
tail = &stack[];
null = tail++;
null->set(, NULL);
root = null;
}
inline Node *newNode(int v) {
Node *p = tail++;
p->set(v, null);
return p;
}
inline void gogo(int n) {
char c;
int i, v, a, b;
for (i = ; i <= n; i++) {
scanf("%d", &v);
ptr[i] = newNode(v);
}
for (i = ; i <= n; i++) {
cin >> c;
if (c == 'd'){
scanf("%d %d", &a, &b);
ptr[i]->link(ptr[a], );
ptr[i]->link(ptr[b], );
} else if (c == 'l') {
scanf("%d", &a);
ptr[i]->link(ptr[a], );
} else if (c == 'r') {
scanf("%d", &b);
ptr[i]->link(ptr[b], );
}
if (ptr[i]->fa == null) root = ptr[i];
}
}
inline void PreOder(Node *x, vector<int> &res) {
if (x != null) {
x->push_down();
res.push_back(x->v);
PreOder(x->ch[], res);
PreOder(x->ch[], res);
}
}
inline void PreOder() {
vector<int> res;
if (root == null) {
puts("NULL");
return;
}
root->update();
PreOder(root, res);
int n = res.size();
for (int i = ; i < n; i++) {
printf("%d%c", res[i], i < n - ? ' ' : '\n');
}
}
}tree;
int main() {
#ifdef LOCAL
freopen("in.txt", "r", stdin);
freopen("out.txt", "w+", stdout);
#endif
int n;
while (~scanf("%d", &n)) {
tree.init();
tree.gogo(n);
tree.PreOder();
}
return ;
}

九度oj 1521 二叉树的镜像的更多相关文章

  1. 九度oj 1184 二叉树遍历

    原题链接:http://ac.jobdu.com/problem.php?pid=1184 简单的二叉树重建,遍历. 如下: #include<cstdio> #include<cs ...

  2. 九度OJ 1541 二叉树【数据结构】

    题目地址:http://ac.jobdu.com/problem.php?pid=1541 题目描述: 旋转是二叉树的基本操作,我们可以对任意一个存在父亲节点的子节点进行旋转,包括如下几种形式(设被旋 ...

  3. [九度OJ]1078.二叉树的遍历(重建)

    原题链接:http://ac.jobdu.com/problem.php?pid=1078 题目描述: 二叉树的前序.中序.后序遍历的定义:前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其 ...

  4. [九度OJ]1113.二叉树(求完全二叉树任意结点所在子树的结点数)

    原题链接:http://ac.jobdu.com/problem.php?pid=1113 题目描述: 如上所示,由正整数1,2,3……组成了一颗特殊二叉树.我们已知这个二叉树的最后一个结点是n.现在 ...

  5. 九度OJ 1113 二叉树

    题目地址:http://ac.jobdu.com/problem.php?pid=1113 题目描述: 如上所示,由正整数1,2,3……组成了一颗特殊二叉树.我们已知这个二叉树的最后一个结点是n.现在 ...

  6. 九度OJ 1078 二叉树遍历

    题目地址:http://ac.jobdu.com/problem.php?pid=1078 题目描述: 二叉树的前序.中序.后序遍历的定义: 前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历 ...

  7. 九度oj 1541 二叉树

    原题链接:http://ac.jobdu.com/problem.php?pid=1541 简答题如下: #include<algorithm> #include<iostream& ...

  8. 剑指Offer - 九度1521 - 二叉树的镜像

    剑指Offer - 九度1521 - 二叉树的镜像2013-11-30 23:32 题目描述: 输入一个二叉树,输出其镜像. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入 ...

  9. 【九度OJ】题目1113:二叉树 解题报告

    [九度OJ]题目1113:二叉树 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1113 题目描述: 如上所示,由正整数1,2,3-- ...

随机推荐

  1. matlab 小波变换

    MATLAB小波变换指令及其功能介绍 1 一维小波变换的 Matlab 实现 (1) dwt函数 功能:一维离散小波变换 格式:[cA,cD]=dwt(X,'wname') [cA,cD]=dwt(X ...

  2. Oracle 物化视图创建

    create materialized view MV_XXXXrefresh fast on commitwith rowidenable query rewriteasselect * from ...

  3. 关键字 new 的作用

    ①做运算符 用于创建对象和调用构造函数,小栗子a如下: Class1 obj = new Class1(); 创建匿名类型的实例,小栗子b如下: var query = from cust in cu ...

  4. oracle表中某个字段含有字符回车、空格的手动修改方式

    select t.*, t.rowid from TB_SD_STANDARD_CHOOSE_ADVISE t where t.id =323900000 update TB_SD_STANDARD_ ...

  5. java基础回顾(三)——HashMap与HashTable

    public class Hashtable extends Dictionary implements Map, Cloneable, java.io.Serializable public cla ...

  6. ios如何获取位置权限

    获取当前位置需要改plist文件  在plist文件加入   NSLocationWhenInUseUsageDescription  字段 /** 初始化一个管理器对象 */ locationMan ...

  7. ng-class ionic

    我发现 ng-class="{yourclass:true,outerclass:false}" 竟然不起作用...囧.... 幸好有Google  .... <p ng-c ...

  8. Oracle笔记 四、增删改、事务

    1.插入 insert into dept values(50, 'soft', 'Guangzhou'); insert into dept(deptno, dname) values(60, 's ...

  9. my vimrc

    runtime! debian.vim "设置编码 ,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936 ,ucs-bom,chinese "语言 ...

  10. Count and Say [LeetCode 38]

    1- 问题描述 The count-and-say sequence is the sequence of integers beginning as follows: 1, 11, 21, 1211 ...