二叉排序树(三序输出)

二叉排序树

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:6039

解决:2538

题目描述:

输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历。

输入:

输入第一行包括一个整数n(1<=n<=100)。     接下来的一行包括n个整数。

输出:

可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序、中序和后序遍历。     每种遍历结果输出一行。每行最后一个数据之后有一个空格。

样例输入:
5
1 6 5 9 8
样例输出:
1 6 5 9 8
1 5 6 8 9
5 8 9 6 1 
提示:

输入中可能有重复元素,但是输出的二叉树遍历序列中重复元素不用输出。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
typedef struct Node{
    Node *l, *r;
    int v;
    Node(){l = NULL; r = NULL;}
}*tree, Node;
tree build(tree p, int v){
    if(p == NULL){
        p = new Node();
        p->v = v;
        return p;
    }
    if(v < p->v)
        p->l = build(p->l, v);
    else if(v > p->v)
        p->r = build(p->r, v);
    else
        return p;
    return p;
}
void PreOrder(tree p){
    if(p == NULL)return;
    printf("%d ", p->v);
    PreOrder(p->l);
    PreOrder(p->r);
}
void InOrder(tree p){
    if(p == NULL)return;
    InOrder(p->l);
    printf("%d ", p->v);
    InOrder(p->r);
}
void PostOrder(tree p){
    if(p == NULL)return;
    PostOrder(p->l);
    PostOrder(p->r);
    printf("%d ", p->v);
}
int main(){
    int N;
    while(~scanf("%d", &N)){
        tree p;
        p = NULL;
        int v;
        for(int i = 0; i < N; i++){
            scanf("%d", &v);
            p = build(p, v);
        }
        PreOrder(p);
        puts("");
        InOrder(p);
        puts("");
        PostOrder(p);
        puts("");
    }
    return 0;
}

时间: 2024-10-12 06:37:06

二叉排序树(三序输出)的相关文章

字符串逆序输出

描述 给定一行字符,逆序输出此行(空格.数字不输出) 输入 第一行是一个整数N(N<10)表示测试数据的组数) 每组测试数据占一行,每行数据中间有且只有一个空格(这样你可以把此行当成两个字符串读取). 每行字符长度不超过40 并且保证输入的字符只有空格(1个),数字,小写字母三种 输出 对应每行测试数据,逆序输出(空格和数字不输出) 样例输入 3 abc 123de abc 123 abc d 样例输出 edcba cba dcba 1 #include <stdio.h> 2 #inc

c#编程:给定一个正整数求出是几位数并逆序输出

<span style="color:#FF0000;">第一步:把输入的数字转为字符串n.ToString() 第二步:求出字符串的长度即为正整数的位数 第三步:从后向前逆序输出</span> 附代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; //给一个正整数, //要求:一.求它是几位数,二.逆序打印出各位数字. namespa

Swift入门(十二)——利用Extension添加逆序输出字符串方法

Swift好像没有自带逆序输出字符串的方法,于是决定通过拓展(Extension)给String类添加一个逆序输出字符串的reverse方法. 首先新建一个Swift文件,命名规则不太清楚,于是暂且模仿OC叫做String+Operation吧,然后实现我们需要拓展的方法.下面先贴上代码,然后解释一下这段代码. //String+Operation.swifft import Foundation //逆序输出swift中的字符串 extension String{ func Reverse()

单链表逆序或者逆序输出

分为两种情况,一种是只逆序输出,实际上不逆序:另一种是把链表逆序. ********************逆序输出*********************** 1 #include<iostream> 2 #include<stack> 3 #include<assert.h> 4 using namespace std; 5 6 7 typedef struct node{ 8 int data; 9 node * next; 10 }node; 11 12 //

ACM-字符串逆序输出

描述 给定一行字符,逆序输出此行(空格.数字不输出) 输入 第一行是一个整数N(N<10)表示测试数据的组数) 每组测试数据占一行,每行数据中间有且只有一个空格(这样你可以把此行当成两个字符串读取). 每行字符长度不超过40 并且保证输入的字符只有空格(1个),数字,小写字母三种 输出 对应每行测试数据,逆序输出(空格和数字不输出) 样例输入 3 abc 123de abc 123 abc d 样例输出 edcba cba dcba 代码: #include<iostream> #inc

链表逆序输出 ---九度1511

题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 输入: 每个输入文件仅包含一组测试样例. 每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点.第一行是链表第一个节点的值,依次类推.当输入到-1时代表链表输入完毕.-1本身不属于链表. 输出: 对应每个测试案例,以从尾到头的顺序输出链表每个节点的值,每个值占一行. 样例输入: 1 2 3 4 5 -1 样例输出: 5 4 3 2 1 解题思路: 方法一:直接用数组存储数据,然后反向输出,不过好像通不过.为什么? 方法二:利用

逆序输出一句话

对一句话里面的单词进行reverse,标点符号位置不变.符号包括:,.!? 例:输入:Hello, my dear friend! 输出:olleH, ym raed dneirf! 思路:由于需要逆序输出,因此想到利用栈数据结构来实现. 代码如下(调试环境:VS2013): 逆序输出一句话,布布扣,bubuko.com

1111 多个整数的逆序输出

题目来源:https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1111Description输入n和n个整数,以与输入顺序相反的顺序输出这n个整数.要求不使用数组,而使用递归函数实现.递归函数实现过程如下:void inverse(int n){    if(n >1)   {        (1) 读入一个整数,存入num;        (2)  将后面的n-1个数逆序输出: inverse(n-1);          (3)  输出num: 

2015-4-2的阿里巴巴笔试题:乱序的序列保序输出(bit数组实现hash)

分布式系统中的RPC请求经常出现乱序的情况.写一个算法来将一个乱序的序列保序输出.例如,假设起始序号是1,对于(1, 2, 5, 8, 10, 4, 3, 6, 9, 7)这个序列,输出是:123, 4, 567, 8, 9, 10 上述例子中,3到来的时候会发现4,5已经在了.因此将已经满足顺序的整个序列(3, 4, 5)输出为一行. 1 #include<stdio.h> 2 3 int main() 4 { 5 int num ; 6 while(scanf("%d"