Aizu - ALDS1_7_C Tree Walk

Binary trees are defined recursively. A binary tree T is a structure defined on a finite set of nodes that either

  • contains no nodes, or
  • is composed of three disjoint sets of nodes:
    - a root node.
    - a binary tree called its left subtree.
    - a binary tree called its right subtree.

Your task is to write a program which perform tree walks (systematically traverse all nodes in a tree) based on the following algorithms:

  1. Print the root, the left subtree and right subtree (preorder).
  2. Print the left subtree, the root and right subtree (inorder).
  3. Print the left subtree, right subtree and the root (postorder).

Here, the given binary tree consists of n nodes and evey node has a unique ID from 0 to n-1.

Input

The first line of the input includes an integer n, the number of nodes of the tree.

In the next n linen, the information of each node is given in the following format:

id left right

id is the node ID, left is ID of the left child and right is ID of the right child. If the node does not have the left (right) child, the left(right) is indicated by -1

Output

In the 1st line, print "Preorder", and in the 2nd line print a list of node IDs obtained by the preorder tree walk.

In the 3rd line, print "Inorder", and in the 4th line print a list of node IDs obtained by the inorder tree walk.

In the 5th line, print "Postorder", and in the 6th line print a list of node IDs obtained by the postorder tree walk.

Print a space character before each node ID.

Constraints

  • 1 ≤ n ≤ 25

Sample Input 1

9
0 1 4
1 2 3
2 -1 -1
3 -1 -1
4 5 8
5 6 7
6 -1 -1
7 -1 -1
8 -1 -1

Sample Output 1

Preorder
 0 1 2 3 4 5 6 7 8
Inorder
 2 1 3 0 6 5 7 4 8
Postorder
 2 3 1 6 7 5 8 4 0

Reference

Introduction to Algorithms, Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. The MIT Press.

二叉树的遍历。

1.按照根节点、左子树、右子树的顺序输出结点编号。这称为树的前序遍历。

2.按照左子树、根节点、右子树的顺序输出结点编号。这称为树的中序遍历。

3.按照左子树、右子树、根节点的顺序输出结点编号。这称为树的后序遍历。

#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1000,NIL=-1;
struct Node
{
    int l,r,p;
}T[maxn];
void preParse(int u)//前序遍历
{
    if(u==NIL)
        return ;
    cout<<" "<<u;
    preParse(T[u].l);
    preParse(T[u].r);
}
void inParse(int u)//中序遍历
{
    if(u==NIL)
        return ;
    inParse(T[u].l);
    cout<<" "<<u;
    inParse(T[u].r);
}
void postParse(int u)//后序遍历
{
    if(u==NIL)
        return ;
    postParse(T[u].l);
    postParse(T[u].r);
    cout<<" "<<u;
}
int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
        T[i].p=NIL;
    for(int i=0;i<n;i++)
    {
        int v,l,r;
        cin>>v>>l>>r;
        T[v].l=l;
        T[v].r=r;
        if(l!=NIL)
            T[l].p=v;
        if(r!=NIL)
            T[r].p=v;
    }
    int root;
    for(int i=0;i<n;i++)
        if(T[i].p==NIL)
            root=i;
    cout<<"Preorder\n";
    preParse(root);
    cout<<endl;
    cout<<"Inorder\n";
    inParse(root);
    cout<<endl;
    cout<<"Postorder\n";
    postParse(root);
    cout<<endl;
    return 0;
}
时间: 2024-10-21 06:47:28

Aizu - ALDS1_7_C Tree Walk的相关文章

Chromium网页Layer Tree绘制过程分析

网页绘图表面创建完成之后,调度器就会请求绘制CC Layer Tree,这样网页在加载完成之后就能快速显示出来.通过CC Layer Tree可以依次找到Graphics Layer Tree.Render Layer Tree和Render Object Tree.有了Render Object Tree之后,就可以执行具体的绘制工作了.接下来我们就分析网页CC Layer Tree的绘制过程. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! CC La

Binary Sort Tree(BST)

Basic structure typedef struct BstNode{ key_type key; struct node *lchild; struct node *rchild; struct node *parent; }Node Structure Feature If left_child is not NULL, left child is smaller than parant node, If right_child is not NULL, right child is

12. binary search Trees

12. binary search Trees? ? The search tree data structure supports many dynamic-set operations,including search ,minimum,maximum,predecessor,successor ,insert ,and delete.? Thus, we can use a search tree both as a dictionary and as a priority queue.

京东前端在线笔试

1. 在MySQL的HASH索引是什么 其实,hash就是一种(key=>value)形式的键值对,如数学中的函数映射,允许多个key对应相同的value,但不允许一个key对应多个value.正是由于这个特性,hash很适合做索引,为某一列或几列建立hash索引,就会利用这一列或几列的值通过一定的算法计算出一个hash值,对应一行或几行数据(这里在概念上和函数映射有区别,不要混淆).在java语言中,每个类都有自己的hashcode()方法,没有显示定义的都继承自object类,该方法使得每一

2016.05.20-2016.05.26这周工作时间和内容

这周的学习内容:这周学习了NS图和PAD图,流程图由一些特定意义的图形.流程线及简要的文字说明构成,它能清晰明确地表示程序的运行过程.在使用过程中,人们发现流程线不一定是必需的,为此,人们设计了一种新的流程图,它把整个程序写在一个大框图内,这个大框图由若干个小的基本框图构成,这种流程图简称N-S图.NS图形象直观,具有良好的可见度.例如循环的范围.条件语句的范围都是一目了然的,所以容易理解设计意图,为编程.复查.选择测试用例.维护都带来了方便:NS图简单.易学易用,可用于软件教育和其他方面:功能

CVPR 2015 papers

CVPR2015 Papers震撼来袭! CVPR 2015的文章可以下载了,如果链接无法下载,可以在Google上通过搜索paper名字下载(友情提示:可以使用filetype:pdf命令). Going Deeper With ConvolutionsChristian Szegedy, Wei Liu, Yangqing Jia, Pierre Sermanet, Scott Reed, Dragomir Anguelov, Dumitru Erhan, Vincent Vanhoucke

算法导论-二叉查找数

目录 引言 二叉查找树 节点定义 查找操作 插入操作 删除操作 二叉查找树存在问题 完整源码 讨论区 参考资料 内容                             1.引言                                   前面的文章介绍过二分查找.散列表查找:二分查找效率为Θ(lgn).二分查找要求数组是静态的,即元素不能动态的插入和删除,否则会耗费较多的时间:散列表查找效率可以到达Θ(1),但是一般用于“等于性查找“,不能进行“范围查找”;本文介绍的二叉查找树,(

算法导论学习(三)——数据结构

数据结构中字典(dictionary)的概念:支持在一个集合中插入和删除元素以及测试元素是否属于集合的操作的动态集合被称为字典. 动态集合假定对象中的一个属性被标识为关键字(key),对象可能包含卫星数据,它们与其他对象属性一起移动. 一.基本数据结构 1 栈和队列 栈(stack):后进先出(LIFO) 队列(queue):先进先出(FIFO) 栈顶指向最近被推入栈的元素的位置. 栈判空(时间复杂度O(1)): STACK-EMPTY(S) if S.top==0 return TRUE el

安装及运行 RabbitMQ 服务器 (linux) 失败! 安装erlang 失败,无法继续

文档 http://www.rabbitmq.com/install-rpm.html 安装前置条件 Before installing RabbitMQ, you must install Erlang. 下载RabbitMQ 提供的 erlang-17.4-1.el6.x86_64.rpm 比其他三种方式简单 下载otp_src_18.0.tar.gz.td 从www.erlang.org 官网下载 下载rabbitmq-key.asc 签名文件 下载 rabbitmq-server-3.5