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

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

如下:

 #include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
using std::queue;
using std::vector;
using std::cin;
const int Max_N = ;
struct Node{
int v;
Node *f, *ch[];
inline void set(int _v = , Node *p = NULL){
v = _v, f = ch[] = ch[] = p;
}
inline void link(Node *x, bool d){
ch[d] = x;
x->f = this;
}
};
struct BinaryTree{
Node *tail, *root, *null;
Node stack[Max_N], *ptr[Max_N];
void init(){
tail = &stack[];
null = tail++;
null->set();
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], );
} else {
;
}
if (ptr[i]->f == null) root = ptr[i];
}
}
inline void bfs(){
queue<Node *> que;
vector<int> ans;
que.push(root);
while (!que.empty()){
Node *x = que.front();
que.pop();
ans.push_back(x->v);
if (x->ch[] != null) que.push(x->ch[]);
if (x->ch[] != null) que.push(x->ch[]);
}
int n = ans.size();
for (int i = ; i < n; i++){
printf("%d%c", ans[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.bfs();
}
return ;
}

九度oj 1523 从上往下打印二叉树的更多相关文章

  1. 剑指Offer - 九度1523 - 从上往下打印二叉树

    剑指Offer - 九度1523 - 从上往下打印二叉树2013-12-01 00:35 题目描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 输入: 输入可能包含多个测试样例,输入以E ...

  2. 剑指Offer面试题:21.从上到下打印二叉树

    一.题目:从上到下打印二叉树 题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印.例如输入下图中的二叉树,则依次打印出8.6.10.5.7.9.11. 二叉树节点的定义如下,采用 ...

  3. 【剑指offer 面试题23】从上往下打印二叉树

    思路: 没啥好说的,BFS. C++: #include <iostream> #include <queue> using namespace std; struct Tre ...

  4. C++版 - 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解

    剑指offer  面试题23:从上往下打印二叉树 参与人数:4853  时间限制:1秒  空间限制:32768K 提交网址: http://www.nowcoder.com/practice/7fe2 ...

  5. 剑指offer——从上往下打印二叉树

    题目描述:从上到下打印二叉树的节点,同一层的从左到右打印 思路:采用队列来存储单层的节点,然后通过删除队列的头结点操作,依次遍历每一层. 代码为: import java.util.ArrayList ...

  6. 剑指Offer-从上往下打印二叉树

    题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路 使用两个队列一个存放节点,一个存放值.先将根节点加入到队列中,然后遍历队列中的元素,遍历过程中,访问该元素的左右节点,再将左右子 ...

  7. 《剑指offer》从上往下打印二叉树

    本题来自<剑指offer> 从上往下打印二叉树 题目: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: 队列的思想. 先将根节点加入,当取该节点时候,依次将左右子树加入,直 ...

  8. 剑指Offer 22. 从上往下打印二叉树 (二叉树)

    题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 题目地址 https://www.nowcoder.com/practice/7fe2212963db4790b57431d9ed25 ...

  9. 剑指offer从上往下打印二叉树 、leetcode102. Binary Tree Level Order Traversal(即剑指把二叉树打印成多行、层序打印)、107. Binary Tree Level Order Traversal II 、103. Binary Tree Zigzag Level Order Traversal(剑指之字型打印)

    从上往下打印二叉树这个是不分行的,用一个队列就可以实现 class Solution { public: vector<int> PrintFromTopToBottom(TreeNode ...

随机推荐

  1. 【PL/SQL练习】命名块: 存储过程、函数、触发器、包

    创建时定义名称 2.可以被Oracle server 保存 3.可以被任何程序调用 4.可以被共享 存储过程: 1.不带参数的存储过程: SQL> create or replace proce ...

  2. rsync拉取远程文件

    mkdir -p   /doc sshpass -p ''pwd" rsync -avz -e 'ssh -o UserKnownHostsFile=/dev/null -o StrictH ...

  3. 学习总结 JDBC

  4. jQuery datepicker

    <script type="text/javascript" src="/assets/datepicker/jquery-ui-1.9.1.min.js" ...

  5. uitableviewcell高度自适应笔记

    今天看了几篇uitableviewcell高度自适应的文章,大体分为两种方式. 第一种方式,cell里面有label,在cellforrow绘制的时候计算Label的可能高度,并且在此时重新计算cel ...

  6. 设置Eclipse自动跳转到debug模式的小技巧

    默认情况下,eclipse中右键debug,当运行到设置的断点时会自动跳到debug模式下.但由于我的eclipse环境,从开始一直用到现在,中间包括装.卸各种插件,更换版本,从英文界面导到中文界面又 ...

  7. ionic goto other page or alert

    有时候需要 调试,这是就需要alert 的...可惜的是我不会angular  所以记录一下 .controller('mainctr', function($scope, $window) { $w ...

  8. CLRS:master theory in complexity of algorithm

    T(n)=aT(n/b)+f(n); where we can interpret n/b to mean either floor(b/n) or ceil(b/n), Then T (n) has ...

  9. python3的文件操作

    open的原型定义在bultin.py中,是一种内建函数,用于处理文件 open(file, mode='r', buffering=None, encoding=None, errors=None, ...

  10. Transaction 'IREG', Abend 'APCT', at '????'.

    应用的问题: Transactions can fail with an APCT abend, when there is a failure in a transaction attempting ...